我需要兩樣東西:爪哇 - 電流轉換成日期UTC和UTC在任何時區
轉換當前時間爲UTC(這樣我就可以存儲在UTC格式日期) - >結果= java的.util.Date。
轉換加載日期(UTC格式)轉換成任意的時區 - >結果= java.util.Date或毫秒。
對於這兩點,都要考慮到日光。
1) 我發現了以下計算器:
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset/1000/60/60;
int offsetMins = offset/1000/60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
- >結果等於UTC?
2)
public static long getTimeMillisFromTimeZone(long utcTimeMillis,
String timeZoneId) {
System.out.println("input millis: " + utcTimeMillis);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTimeInMillis(utcTimeMillis);
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone(timeZoneId);
calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, calendar.getTimeZone()
.getDSTSavings() * -1);
}
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}
System.out.println(calendar.getTime());
System.out.println("output millis: " + calendar.getTime().getTime());
return calendar.getTime().getTime();
}
- >我有一個問題存在 - >丟失1H!
在我的例子中,我將TimeZone「Europe/Vienna」(使用daylight)的日期作爲utc存儲到數據庫中。現在我想把這個UTC(09:00)轉換成「歐洲/維也納」,我得到了:09:00 =我輸了一小時..
可能重複[我怎樣才能得到當前日期和時間在UTC或GMT在Java?](http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date-and-time-in-utc-or-gmt -in-java) –