簡體   English   中英

將ISO8601字符串轉換為DateTime格式?

[英]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.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊式舊式日期時間類,例如java.util.Date.Calendarjava.text.SimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time。

要了解更多信息,請參見Oracle教程 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310

在哪里獲取java.time類?

  • Java SE 8SE 9及更高版本
    • 內置的
    • 標准Java API的一部分,具有捆綁的實現。
    • Java 9添加了一些次要功能和修復。
  • Java SE 6SE 7
    • java.time的許多功能在ThreeTen- Backport中都被反向移植到Java 6和7。
  • 安卓系統

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目為將來可能在java.time中添加內容提供了一個試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM