2013-06-21 30 views
5

我已經這樣做了我的日曆實例在UTC時區返回日期Calendar.getTime()如果TimeZone的定義沒有返回UTC日期

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z"); 
TimeZone tz = TimeZoneUtil.getTimeZone(StringPool.UTC); 
formatter.setTimeZone(tz); 

    Date dtStart = null; 
    Date dtEnd = null; 

    try{ 
     dtStart = formatter.parse(formatter.format(startDate.getTime())); 
     dtEnd = formatter.parse(formatter.format(endDate.getTime())); 
    }catch (Exception e) { 
     e.getStackTrace(); 
} 

它正常工作,直到我的格式日曆時間戳返回一個字符串日期與所需的時區,但當我解析字符串日期到日期日期,它再次拿起本地時區? 我需要在UTC時區存儲Date對象。

任何幫助將不勝感激!

+0

可能的重複[如何獲取當前的日期和時間在UTC中的GMT或GMT?](http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date -out-time-in-utc-or-gmt-in-java) –

回答

7

您可以使用此:

Date localTime = new Date(); 

//creating DateFormat for converting time from local timezone to GMT 
DateFormat converter = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss"); 

//getting GMT timezone, you can get any timezone e.g. UTC 
converter.setTimeZone(TimeZone.getTimeZone("GMT")); 

System.out.println("local time : " + localTime);; 
System.out.println("time in GMT : " + converter.format(localTime)); 

它會給:
本地時間:週五6月21日11:55:00 UTC 2013
時間GMT:21/06/2013: 11:55:00

我希望這會有所幫助。

乾杯。

0

java中的日期對象將始終將值存儲在主機(系統)的時區信息中。

這是從的javadoc:

儘管Date類打算反映協調世界時(UTC),它可能無法做到如此準確,這取決於Java虛擬機的主機環境。

你應該嘗試使用Joda Time這是非常先進的。

+0

這不是事實,默認的Date()構造函數存儲[System.currentTimeMillis()]的值(http://docs.oracle.com/JavaSE的/ 7 /文檔/ API /爪哇/郎/系統。html#currentTimeMillis%28%29),這是自1970年1月1日UTC以來的毫秒數。正如您所提到的,「計算機時間」與UTC之間存在細微的差異,請參閱[閏秒](http://docs.oracle.com/javase/7/docs/api/java/util/Date.html) 。但喬達時間在這方面沒有提供任何優勢,請參閱[是否支持閏秒](http://joda-time.sourceforge.net/faq.html#leapseconds)。 – devconsole

-1

爲什麼Date對象以當前時區價值的很好的解釋,

請參閱本SO answer

編輯。


這裏我要添加一些重要部分的答案。


java.util.Date沒有特定的時區,儘管它的值通常與UTC有關。是什麼讓你認爲這是在當地時間?

準確地說:java.util.Date中的值是自Unix時代開始的毫秒數,發生在UTC時間1970年1月1日午夜的毫秒數。同樣的時代也可以在其他時區描述,但傳統的描述是以UTC爲單位的。由於它是固定時期以來的毫秒數,因此無論本地時區如何,在任何特定時刻,java.util.Date中的值都是相同的。

相關問題