2014-09-22 87 views
3
 DateTime dt = new DateTime("2014-09-15T21:20:14"); 
     System.out.println(dt); 
     System.out.println(dt.plusMillis(581042272).toDateTime().toLocalDateTime().toDateTime(DateTimeZone.forID("GMT"))); 

dt中的時間是UTC,我想將時間設置爲dt加上毫秒到GMT?但是,時間仍然以UTC格式打印(格林威治標準時間後1小時)。我如何設置它,因此它在前面一個小時?在喬達將UTC轉換爲LocalDateTime?

2014-09-15T21:20:14.000+01:00 
2014-09-22T14:44:16.272Z 

我知道時間是整整一個小時的背後,因爲我提出這個要求在15點44分16秒GMT

+0

你是什麼意思「dt中的時間是UTC」?顯然,第一行輸出並不是這種情況。你的意思是'「2014-09-15T21:20:14」'意思是UTC? – 2014-09-22 15:01:34

+0

是的,抱歉,如果它不清楚喬恩。 – Adz 2014-09-22 15:02:17

回答

4

DateTime實際上是在UTC - 這是系統默認的時區。爲了解決這個問題,你只需要告訴它你傳遞的價值是在UTC:

DateTime dt = new DateTime("2014-09-15T21:20:14", DateTimeZone.UTC); 
System.out.println(dt); 
DateTime other = dt.plusMillis(581042272); 
System.out.println(other); 

輸出:

2014-09-15T21:20:14.000Z 
2014-09-22T14:44:16.272Z 

另外請注意,你不能取得在請求格林威治標準時間15:44:16,因爲這還沒有發生。在我寫這篇文章的時候,這是英國夏令時16:05,因此格林威治標準時間15:05。瞭解英國的時區不是「GMT」時非常重要 - 這只是我們不遵守夏令時的時區的一部分。

如果要轉換到英國時區,你想:

DateTime other = dt.plusMillis(581042272) 
    .withZone(DateTimeZone.forID("Europe/London")); 
+0

完美的喬恩,謝謝。 – Adz 2014-09-22 15:18:24

0
val marketCentreTime = timeInAnotherTimezone.withZone(DateTimeZone.forID("yourCountryName/andyourCityName")); 
5

對於那些有麻煩從服務器轉換日期時間當地日期時間:

詞根記憶確定服務器給你一個UTC時間,也就是說,格式應該包含一個時區。 2.使用模式轉換,如果api不給你一個時區,那麼你可能會因爲最後的'Z'而得到一個異常。

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
     DateTime dt = formatter.parseDateTime(currentPost.postDate); 

3.to檢查(時間偏移量(可選)

DateTimeZone ActualZone = dt.getZone(); 

4.Convert本地時間

TimeZone tz2 = TimeZone.getDefault(); 
     DateTime localdt = new DateTime(dt, DateTimeZone.forID(tz2.getID())); 

如果你自己控制API,它恰巧是一個asp.net API,check this,設置日期時間的Kind,即使您可能已將其作爲UTC時間保存在數據庫中,也會將日期時間與默認值一起發送服務器時區)