簡體   English   中英

使用 DateTimeFormatter 將字符串解析為 LocalDateTime 失敗

[英]Failed String Parsing to LocalDateTime using DateTimeFormatter

我正在嘗試使用 DateTimeFormatter 和 LocalDateTime 將一個簡單的字符串 [08/May/2020:09:14:05 +0000] 解析為 LocalDateTime 但它似乎由於某些原因不起作用。 我嘗試了對格式的不同更改,例如 DD、hh、X、x 或 Z,但它不起作用。

這是代碼:

String log = "[08/May/2020:09:14:05 +0000]";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[d/MMM/yyyy:HH:mm:ss x]");
LocalDateTime odt = LocalDateTime.parse(log, fmt);
System.out.println(odt);

有什么猜測嗎?

所有功勞歸於安德烈亞斯。 他在評論中的建議足以作為答案發布。

    String log = "[08/May/2020:09:14:05 +0000]";
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("'['dd/MMM/uuuu:HH:mm:ss xx']'", Locale.US);
    LocalDateTime odt = LocalDateTime.parse(log, fmt);
    System.out.println(odt);

Output 是:

2020-05-08T09:14:05

在格式模式字符串中,方括號[] (通常)用於包含格式的可選部分。 由於您要指定文字方括號位於日期時間字符串中,因此請將它們括在格式模式字符串中的撇號中。 這取消了括號的含義。

還使用xx表示 UTC 偏移量,小時和分鍾不帶冒號,例如+0000

最后,當字符串包含區域設置敏感部分(例如月份縮寫)時,始終指定區域設置。 在這種情況下,我認為任何說英語的語言環境都可以使用,包括Locale.ENGLISHLocale.ROOTLocale.UKLocale.US等等。

去掉方括號。 並將另一個 x 添加到時區格式。

log = log.replaceAll("\\[", "");
log = log.replaceAll("]", "");
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[d/MMM/yyyy:HH:mm:ss xx]");

您可以將括號重新添加到

System.out.println("[" + odt + "]");

此外,您可能希望在月份中添加另一個“d”。

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("[dd/MMM/yyyy:HH:mm:ss xx]");

暫無
暫無

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

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