我有日期2016-03-30T23:59:59.000000+0000
。我想知道這是什麼格式 ,因爲如果我用yyyy-MM-dd'T'HH:mm:ss.SSS
,它拋出一個異常日期格式化問題+號
1
A
回答
2
SimpleDateFormat給你答案:
yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
2
如果你真的有微秒從此零不同的我強烈建議不要使用SimpleDateFormat
,而是使用Java-8-Time-API或另一個可處理微秒的時間庫。而且這並不是唯一一箇舊API被證明非常有限的情況。
爲SimpleDateFormat
(破碎,毫秒消失!)反面教材:
String input = "2016-03-30T23:59:59.123456+0530";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(sdf.parse(input))); // 2016-03-30T18:32:02.000456+0000
Java的8例(作品):
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
OffsetDateTime odt = OffsetDateTime.parse(input, dtf);
System.out.println(odt); // 2016-03-30T23:59:59.123456+05:30
如果你從來沒有微秒,但只有毫秒,想要堅持使用舊API,那麼你可以嘗試下面的破解:
String input = "2016-03-30T23:59:59.123000+0530";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'xxx'Z");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
sdf2.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf2.format(sdf1.parse(input.replace("000", "xxx"))));
2016-03-30T18:29:59.123 + 0000
然而,這個「解決方案」在2000年中斷了(你可以通過進一步的字符串預處理找到更好的解決方案),並且最終可用的微秒會丟失。所以在這裏使用SimpleDateFormat
是一個壞主意。
相關問題
- 1. 日期格式化問題
- 2. 格式化日期的問題
- 3. 日期文化格式問題
- 4. 格式化日期時遇到問題
- 5. 簡單日期格式化問題yyyymmdd
- 6. 日期間的SQL - 格式化問題?
- 7. 比較日期 - 日期格式問題
- 8. DataTable.Select日期格式問題
- 9. 豬日期格式問題
- 10. C#日期格式問題
- 11. PHP日期格式問題
- 12. Java日期格式問題?
- 13. PHP日期格式問題
- 14. 日期格式問題PHP
- 15. Python格式日期問題
- 16. XSL日期格式問題
- 17. 日期格式問題
- 18. 日期格式問題
- 19. jQuery:beforeShowDay日期格式問題
- 20. Oracle日期格式問題
- 21. ASPxGridView - 日期格式問題
- 22. 日期格式問題
- 23. 日期格式問題
- 24. 日期格式問題
- 25. Oracle日期格式問題
- 26. Groovy日期格式問題
- 27. restheart日期格式問題
- 28. SQL日期格式問題
- 29. Oracle日期格式問題
- 30. 日期格式問題2008
'+ 0000'是時區偏移量。 – Jesper