亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析所有 ISO 8601 日期時間格式 Java 1.8

解析所有 ISO 8601 日期時間格式 Java 1.8

慕碼人8056858 2021-12-30 20:07:58
我在我的項目中使用 spring boot 和 Java 1.8。我們從需要解析的外部系統接收日期字符串。問題是外部系統可以發送任何符合 ISO 8601 的 DateTime,我們需要解析出現的任何 ISO 8601 格式字符串。誰能建議我如何做到這一點?有沒有圖書館可以這樣做?傳遞的兩種 DateTime 格式是 2018-11-01T16:26:15+0100、2018-10-31T08:27:00.0000000Z,還有更多。我在 StackOverflow 上發現了一些建議使用 Joda 時間轉換器的帖子,但我無法用它解析日期 2018-10-31T08:27:00.0000000Z。
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

這可能會為您解決或至少是一個開始:


    DateTimeFormatter formatter = new DateTimeFormatterBuilder()

            .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)

            .appendPattern("XX")

            .toFormatter();


    String[] stringsPassed = {

            "2018-11-01T16:26:15+0100",

            "2018-10-31T08:27:00.0000000Z"

    };

    

    for (String sample : stringsPassed) {

        OffsetDateTime odt = OffsetDateTime.parse(sample, formatter);

        System.out.println(odt);

    }

輸出:


2018-11-01T16:26:15+01:00

2018-10-31T08:27Z

它不會解析所有可能的 ISO 8601 字符串,但可能會解析您可以獲得的字符串。由于您只向我們展示了兩個樣本,我無法知道。


java.time 是現代 Java 日期和時間 API,對 ISO 8601 非常友好。它處理秒的存在和不存在以及秒的小數部分(最多 9 位小數)。這就是我DateTimeFormatter.ISO_LOCAL_DATE_TIME在代碼中使用的。一個小問題是內置的DateTimeFormatter.ISO_OFFSET_DATE_TIME,否則看起來就在這里,需要 UTC 偏移量中的冒號,如+01:00. 相反,我使用格式模式XX。它接受不帶冒號的偏移量,也接受Z你的第二個例子。如果還需要更多的靈活性,您可以查看格式化程序中的可選部分。檢查文檔。


喬達時間?使用 Java 8 時不推薦使用。 Joda-Time 主頁上的一些引用:


Joda-Time 是Java SE 8 之前的 Java事實標準日期和時間庫?,F在要求用戶遷移到java.time (JSR-310)。


請注意,Joda-Time 被認為是一個很大程度上“已完成”的項目。沒有計劃進行重大改進。如果使用 Java SE 8,請遷移到java.time(JSR-310)。


即使在 Java 6 和 7 上,我也會推薦 java.time 的反向移植而不是 Joda-Time。


查看完整回答
反對 回復 2021-12-30
  • 1 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號