2017-05-26 25 views
2

我想構建日期「2017-03-29 18:17:12 + 00」,但我得到了以下格式使用格式「2017-03-29 18:17:12 + 00」的日期格式是什麼

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssZ"; 

2017-02-28 11:12:31+0000 

我需要格式「2017-03-29 18:17:12 + 00」。

如何得到它?格式是什麼?

請提供您的輸入

回答

1

嘗試X在您的格式字符串中輸入Z

4

嘗試X這是ISO 8601 time zone

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssX"; 
+1

謝謝你!它按預期工作! – SST

+1

關閉,但[ISO 8601](https://en.m.wikipedia.org/wiki/ISO_8601)是用於定義日期時間字符串的文本格式的標準。但實際上,爲了符合標準,這個字符串必須在中間而不是空格中使用「T」。此時不涉及時區,只有[UTC的偏移量](https://en.m.wikipedia.org/wiki/UTC_offset)爲零,表示[UTC](https://en.m .wikipedia.org/wiki/Coordinated_Universal_Time)本身。時區是一個「大陸/地區」,例如「美國/蒙特利爾」,它命名了特定區域使用的偏移量的變化歷史。 –

0

如果使用JDK 8 java.time API,默認情況下將獲得所需的格式(ISO 8601)

System.out.println(OffsetDateTime.now(ZoneId.systemDefault())); // 2017-05-26T16:20:42.821+05:30 
+0

關閉!你在那裏有一個T,我沒有看到OP所要求的(當然,他/他應該使用現代類,他們也可以在沒有T的情況下產生字符串)。 –

+1

要除掉T,可以在字符串上使用'.replace('T','')'或使用'.format(DateTimeFormatter.ofPattern(「yyyy-MM-dd HH:mm:ssX」)) 'OffsetDateTime'(我還沒有測試過) –

0

我會確保始終使用ISO8601。

由於shazin聲明你可以用X替換你的Z來執行接受日期。

至於另外我建議使用OffsetDateTime API這樣的:

OffsetDateTime time = OffsetDateTime.parse(YOUR_DATE_STRING); 

這會給你一個OffsetDateTime對象,你可以用正確的時區工作。此外,如果你想輸入轉換爲本地時區或UTC時區,你可以使用

time.atZoneSameInstant(ZoneId.systemDefault()); 
0

請注意,並非所有時區通過的 小時的整數倍,從UTC偏移。所以當創建標準時,沒有人會認爲 是一個需要將時間轉換打印爲只有2位數字的需求。

,也許這就是爲什麼「Z」的時移佔位符轉換爲 「+」或「 - 」字符,只是數字。

我認爲,該解決方案是:

  • 生成所述數據/時間字符串與4位時移部分,
  • 切斷的最後2個數字。

但請注意,在某些情況下,例如阿富汗(4小時30分) 或中部澳大利亞(10小時30分)這個2位數的時間偏移將是不準確的。

+0

它是可行的,但是由於你已經很好地解釋了原因,在切斷它們之前至少應該檢查最後兩位數字是否爲'00'。 –

相關問題