2016-05-31 73 views
-3

我想將給定的UTC字符串日期轉換爲UTC日期對象。 我得到這種格式的UTC字符串dd-MMM-yyyy hh:mm:ss.sssss aa 我想將此String對象轉換爲Date對象。 我試圖通過將時區設置爲「UTC」,它不工作SimpleDateFormat。想要將給定的UTC字符串對象轉換爲UTC日期對象

對我來說唯一的一件事是,將默認的JVM時區強制設置爲UTC,而我不希望這會改變我在許多進程中使用的JVM時間。

請建議。

+2

'Date'沒有時區。 –

+0

總是發佈您的代碼,預期或期望的結果以及實際結果很有幫助。 – nateyolles

+0

請在發佈前徹底搜索Stack Overflow。 –

回答

0

A java.util.Date對象不包含時區信息,所以不存在「UTC Date對象」之類的東西。 A java.util.Date只不過是自01-01-1970,00:00:00格林尼治標準時間以來的幾毫秒內的一個包裝,因此您可以看到一個Date物體指向「絕對」時間點,無論時區。

如果你想打印在一定的時區一個Date對象(例如UTC),然後設置使用Date格式化SimpleDateFormat對象所需的時區:

Date now = new Date(); 

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
df.setTimeZone(TimeZone.getTimeZone("UTC")); 

// Prints the date in the UTC timezone 
System.out.println(df.format(now)); 

如果您正在使用在Java 8中,使用新的java.time API會更好,因爲API的日期和時間比舊的java.util.Datejava.util.Calendar要好得多。例如,使用ZonedDateTime如果希望知道UTC日期和時間:

DateTimeFormatter df = DateTimeFormatter.ofPattern("dd-MMM-yyyy hh:mm:ss.SSSSS a") 
     .withZone(ZoneOffset.UTC); 

ZonedDateTime dateTime = ZonedDateTime.parse("31-May-2016 06:54:16.78000 AM", df); 

如果您使用的是Java 7或以上,可以考慮使用Joda Time

+0

Jesper謝謝你的回覆..我已經嘗試了上面的代碼..因爲我的輸出應該是java.util.Date對象,所以只要我將輸出返回給此對象,它就會拾取JVM默認時區並添加到它。我的服務器時間在CEST,所以它給了我相當於CEST的日期。此外,我的Integartion服務器有JDK 1.7,我不能使用java.time,因爲它隨附更高的服務器版本,所以無法升級到JDK1.8。 –

相關問題