2014-04-19 109 views
0

我需要將時間戳從一個時區轉換爲另一個時區,並檢索該時區的timeinmillisecs。 我嘗試以下,但它不工作了..從一個時區轉換時間戳

SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      localDateFormat.setTimeZone(TimeZone.getTimeZone("anothertimezone)); 
      //Current Date Time in Local Timezone 
      System.out.println("Current Date and Time in local timezone: " + localDateFormat.format(new Date())); 
      Calendar calendar = localDateFormat.getCalendar();  
      System.out.println(calendar.getTime()); 

的calendar.gettime是根據時區打印當前機器的時間,而不是時間

+0

如果調整時區,你仍然有相同數量的紀元以來的毫秒。 –

+0

你好羅勒,我沒有相當讓你.. – oxygenan

+0

我覺得時間戳是一樣的嗎?不同地區的日期時間不同 – hsluo

回答

0

不太清楚你要實現的目標是什麼,但打印在CEST和IST當前時間:

SimpleDateFormat localDateFormat = 
     new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
System.out.println("Current Date/Time in local timezone: " + 
         localDateFormat.format(new Date())); 
localDateFormat.setTimeZone(TimeZone.getTimeZone("IST")); 
System.out.println("Current Date/Time in IST timezone: " + 
         localDateFormat.format(new Date())); 

您也可以在字符串形式的日期和時間,並對其進行分析:

// create a string showing date and time in IST time zone 
String istDateString = localDateFormat.format(new Date()); 
Date istDate = localDateFormat.parse(istDateString, new ParsePosition(0)); 
System.out.println(istDateString + " parsed to " + istDate); 

Date.toString中使用的默認值當然是本地設置。

0

epoch開始,調整時區會使您保持相同的毫秒數。

使用Joda-Time 2.3比Java中捆綁的臭名昭着的java.util.Date和.Calendar類要容易得多。雖然java.util.Date沒有時區,但Joda-Time中的DateTime對象確實知道它自己分配的時區。

以下是一些示例代碼。所有這些DateTime對象表示Universe的時間軸中的同一時刻,即自Unix時代(1970年初)以來的相同毫秒數。要驗證,請調用getMillis方法來提取毫秒數。

String inputRaw = "2014-01-02 03:04:05"; 
String input = inputRaw.replace(" ", "T"); // Convert to strict version of ISO 8601 standard format. 
DateTimeZone timeZoneParis = DateTimeZone.forID("Europe/Paris"); 
DateTime dateTimeParis = new DateTime(input, timeZoneParis); // Interpret that string as being in a particular time zone. 
DateTime dateTimeUtc = dateTimeParis.withZone(DateTimeZone.UTC); 
DateTime dateTimeMontréal = dateTimeParis.withZone(DateTimeZone.forID("America/Montreal")); 

轉儲到控制檯...

System.out.println("input: " + input); 
System.out.println("dateTimeParis: " + dateTimeParis); 
System.out.println("dateTimeParis millis: " + dateTimeParis.getMillis()); 
System.out.println("dateTimeUtc: " + dateTimeUtc); 
System.out.println("dateTimeUtc millis: " + dateTimeUtc.getMillis()); 
System.out.println("dateTimeMontréal: " + dateTimeMontréal); 
System.out.println("dateTimeMontréal millis: " + dateTimeMontréal.getMillis()); 

當運行...

input: 2014-01-02T03:04:05 
dateTimeParis: 2014-01-02T03:04:05.000+01:00 
dateTimeParis millis: 1388628245000 
dateTimeUtc: 2014-01-02T02:04:05.000Z 
dateTimeUtc millis: 1388628245000 
dateTimeMontréal: 2014-01-01T21:04:05.000-05:00 
dateTimeMontréal millis: 1388628245000