[英]Converting an ISO8601 string into DateTime format?
我有一個字符串20130510T202132Z
,我想將其轉換為DateTime
對象。
我一直在嘗試使用Joda使其正常工作,但我無法使其正常工作。 我已經找到了關於該主題的所有鏈接-並使用了格式化程序,但這根本無法解決。
做這個的最好方式是什么?
Joda Time使其非常簡單,因為它內置了對ISO格式的支持:
DateTimeFormatter iso = ISODateTimeFormat.basicDateTimeNoMillis();
DateTime dateTime = iso.parseDateTime(text);
Joda-Time項目現在處於維護模式,團隊建議遷移到java.time類。
DateTimeFormatter
不幸的是,從Java 8開始,標准ISO 8601格式的“基本”(最小分隔符)版本尚未在java.time中預定義。請使用DateTimeFormatter
類指定匹配的模式。
String input = "20130510T202132Z";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuuuMMdd'T'HHmmssX" );
順便說一下,帶有分隔符的版本(例如2013-05-10T20:21:32Z
)被稱為ISO 8601的擴展版本 。
OffsetDateTime
解析為OffsetDateTime
對象。 此類表示時間軸上的某個時刻,該時刻已調整為一定的UTC偏移量 ,解析為納秒。 在這種情況下,偏移量就是UTC本身。
OffsetDateTime odt = OffsetDateTime.parse ( input , f );
odt.toString():
2013-05-10T20:21:32Z
java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊式舊式日期時間類,例如java.util.Date
, .Calendar
和java.text.SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time。
要了解更多信息,請參見Oracle教程 。 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310 。
在哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目為將來可能在java.time中添加內容提供了一個試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.