簡體   English   中英

在 java 中將字符串轉換為 LocalDateTime

[英]Convert a String to LocalDateTime in java

給定2022-9-8,13:30:9.0,+4:0的字符串應轉換為LocalDateTime object 然后保存到數據庫中。

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy:MM:dd,HH:mm:ss");
    System.out.println("this place"+LocalDateTime.parse("2022-9-8,13:30:9.0,+4:0",dtf));

此代碼不起作用,它只是阻止程序執行流程並且不會產生任何錯誤。

如何解決這個問題呢?

根據https://help.gooddata.com/cloudconnect/manual/date-and-time-format.html的文檔,無法轉換字符串中的時區部分。

對於您的情況,我可以找到的封閉格式是“yyyy-Md,H:m:sS,z”,這意味着您必須將給定的字符串轉換為“2022-9-8,13:30:9.0,GMT+ 04:00" 使用正則表達式或拆分給定的字符串。

希望這有幫助

這可能對你有用。 根據更多的各種日期時間字符串,有些事情可能會更簡單地完成。

首先,時間和日期值已更改為允許單個數字值。 然后制作了特殊的模組:

  • 確保刪除小數部分。
  • 確保具有個位數小時的偏移量以0為前綴。
  • 這些被解析為OffsetDateTime字符串。
String[] data = { "2022-9-8,13:30:9.0, +04:00",
        "2022-11-8,13:30:29.1230, +04:00",
        "2022-02-28,13:0:9.120, +4:00",
        "2022-5-18,3:0:34.0, +4:23",
        "2022-11-23,3:9:9.0, +04:43",
        "2022-10-2,8:30:9.0, +5:00",
        "2022-1-8,13:30:39.011, +04:00" };

DateTimeFormatter dtf =
        DateTimeFormatter.ofPattern("yyyy-M-d,H:m:s, z");
for (String datetime : data) {
    System.out.println("Original: " + datetime);
    datetime = datetime
             .replaceFirst("\\.\\d+", "")
             .replaceFirst("([+-])(\\d:\\d\\d)$", "$10$2");
            
    System.out.println("Modified: " + datetime);
    System.out.println(
            "Parsed: " + OffsetDateTime.parse(datetime, dtf));
    System.out.println();
}

印刷

Original: 2022-11-8,13:30:29.1230, +04:00
Modified: 2022-11-8,13:30:29, +04:00
Parsed: 2022-11-08T13:30:29+04:00

Original: 2022-02-28,13:0:9.120, +4:00
Modified: 2022-02-28,13:0:9, +04:00
Parsed: 2022-02-28T13:00:09+04:00

Original: 2022-5-18,3:0:34.0, +4:23
Modified: 2022-5-18,3:0:34, +04:23
Parsed: 2022-05-18T03:00:34+04:23

Original: 2022-11-23,3:9:9.0, +04:43
Modified: 2022-11-23,3:9:9, +04:43
Parsed: 2022-11-23T03:09:09+04:43

Original: 2022-10-2,8:30:9.0, +5:00
Modified: 2022-10-2,8:30:9, +05:00
Parsed: 2022-10-02T08:30:09+05:00

Original: 2022-1-8,13:30:39.011, +04:00
Modified: 2022-1-8,13:30:39, +04:00
Parsed: 2022-01-08T13:30:39+04:00

任何其他表現出來的異常都可以通過在組合中附加適當的替換語句來解決。

代碼看起來不錯,但是您的日期格式錯誤,這就是您的代碼不起作用的原因,我沒有看到像yyyy:MM:dd這樣的格式更正您的日期格式,它會起作用

我發現問題出在格式字符串"yyyy:MM:dd,HH:mm:ss"上,似乎沒有這種格式可用。 因此,修改后的格式應為"yyyy-Md,HH:mm:sS

在給定的字符串中還包含一個timezone ,為了處理它,我必須刪除它然后將其轉換為 LocalDateTime 或將該部分與每次轉換作為hard-coded字符串一起傳遞。

就我而言,我將對時區進行硬編碼。

  DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-M-d,HH:mm:s.S,'+4:0'");
    System.out.println("this place"+LocalDateTime.parse("2022-9-8,13:30:9.0,+4:0",dtf));

這種格式有效。

感謝您的建議

暫無
暫無

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

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