第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 Java 時(shí)間庫(kù)將 ISO 兼容字符串解析為日期

如何使用 Java 時(shí)間庫(kù)將 ISO 兼容字符串解析為日期

梵蒂岡之花 2022-09-22 10:29:04
我有各種格式的時(shí)間戳,例如:2018-07-21T00:50:392017-11-20T23:18:27.529Z我需要將它們解析為java.util.Date,并嘗試了以下方法,它們都適用于第一種格式,但第二種格式失敗。以下是我嘗試過(guò)的方法,它是錯(cuò)誤的:1.private Date try3(String dateString) {        return Date.from(Instant.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());    }它在第一種格式時(shí)失敗,錯(cuò)誤:java.time.format.DateTimeParseException: Text '2017-11-20T23:18:28' could not be parsed at index 192.private Date try2(String dateString) {    return Date.from(LocalDateTime.parse(dateString).atZone(ZoneId.of("UTC")).toInstant());}對(duì)于第二種格式,此方法會(huì)引發(fā)錯(cuò)誤:java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 233:private Date try1(String dateString) {    return Date.from(ZonedDateTime.parse(dateString,                    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").withZone(ZoneId.of("UTC"))).toInstant());}對(duì)于第二種格式,上述方法引發(fā)錯(cuò)誤:java.time.format.DateTimeParseException: Text '2017-11-20T23:18:27.529Z' could not be parsed, unparsed text found at index 19我最終得到了喬達(dá)圖書館:private Date try4(String dateString) {        return new DateTime(dateString).withZone(DateTimeZone.UTC).toDate();    }但是真的有沒(méi)有辦法在Java時(shí)間庫(kù)中做到這一點(diǎn)?
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

你總是想得到同樣的類型,我似乎明白,如果字符串中沒(méi)有偏移量,你需要UTC(重要的是要清楚這一點(diǎn))。我建議指定一個(gè)具有可選UTC偏移量和默認(rèn)值UTC(零偏移量)的格式化程序,以防字符串中沒(méi)有任何偏移量:

 DateTimeFormatter formatter = new DateTimeFormatterBuilder()

            .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)

            .appendPattern("[X]")

            .parseDefaulting(ChronoField.OFFSET_SECONDS, 0)

            .toFormatter();


    String withoutZ = "2018-07-21T00:50:39";

    Instant anInstant = formatter.parse(withoutZ, Instant::from);

    System.out.println(anInstant);


    String withZ = "2017-11-20T23:18:27.529Z";

    Instant anotherInstant = formatter.parse(withZ, Instant::from);

    System.out.println(anotherInstant);

輸出:


2018-07-21T00:50:39Z

2017-11-20T23:18:27.529Z

格式模式字符串中的方括號(hào)表示偏移量 X 是可選的。秒上小數(shù)點(diǎn)的存在與否由 處理。[X]ISO_LOCAL_DATE_TIME

我希望您知道該類設(shè)計(jì)不佳且已經(jīng)過(guò)時(shí),因此通常您不應(yīng)該想要一個(gè),并且您只要求一個(gè),因?yàn)槟豢杀苊獾匦枰粋€(gè)用于傳統(tǒng)API的專用API,而您現(xiàn)在無(wú)法更改。在這種情況下,請(qǐng)從您的問(wèn)題中進(jìn)行最終轉(zhuǎn)換。DateInstant

通常用于可變?nèi)掌?時(shí)間格式的技術(shù)包括:

  1. 依次嘗試許多已知格式。

  2. 在確定要使用的格式之前,請(qǐng)先了解一下字符串。在你的情況下,你可能已經(jīng)分支了,正如巴西爾·布爾克的答案中已經(jīng)建議的那樣。.endsWith("Z")

  3. 格式模式中的可選部件。

  4. DateTimeFormatterBuilder.parseDefaulting()用于已分析字符串中可能不存在的部分。

  5. DateTimeFormatter.parseBest().

如您所見(jiàn),我正在使用項(xiàng)目3。和 4.這里。


查看完整回答
反對(duì) 回復(fù) 2022-09-22
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

時(shí)間

這已經(jīng)被覆蓋了無(wú)數(shù)次。因此,請(qǐng)搜索堆棧溢出以獲取更多信息。

切勿使用 或 。僅使用時(shí)間。同樣,喬達(dá)時(shí)間也被java.time所取代(兩者都由同一個(gè)人斯蒂芬科爾伯恩領(lǐng)導(dǎo))。DateCalendar

兩個(gè)字符串輸入均采用標(biāo)準(zhǔn) ISO 8601 格式。默認(rèn)情況下,java.time 類在解析/生成字符串時(shí)使用這些格式。

第一個(gè)缺少與 UTC 或時(shí)區(qū)的偏移量指示器,因此它不表示某個(gè)時(shí)刻。

LocalDateTime.parse( "2018-07-21T00:50:39" )

第二個(gè)意思是UTC,發(fā)音為“祖魯”。Z

Instant.parse( "2017-11-20T23:18:27.529Z" )

若要在一種方法中處理這兩種格式,請(qǐng)相應(yīng)地搜索 輸入字符串中是否存在 和 分支。此外,陷阱用于異常,以防您收到意外輸入。Z

如果必須有一個(gè)對(duì)象,請(qǐng)參閱該類 JavaDoc 以獲取新方法 & 在轉(zhuǎn)換為 java.time 類的舊類上。正如我所說(shuō),所有這些都已經(jīng)被涵蓋了很多很多次,所以請(qǐng)搜索更多信息。java.util.Datefromto…


查看完整回答
反對(duì) 回復(fù) 2022-09-22
  • 2 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)