我正在嘗試決議 PDF 中使用的日期格式。根據this page,格式如下:
D:YYYYMMDDHHmmSSOHH'mm'
除了年份之外的所有組件都是可選的。我認為這意味著字串可以在任何時候被切斷,即指定一年和一個小時而不指定一個月和一天對我來說似乎毫無意義。此外,這將使決議幾乎不可能。
據我所知,Java 不支持包含單引號的區域偏移量。因此,第一步是擺脫那些:
D:YYYYMMDDHHmmSSOHHmm
生成的 Java 日期模式應如下所示:
['D:']uuuu[MM[dd[HH[mm[ss[X]]]]]]
我的整體代碼如下所示:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("['D:']uuuu[MM[dd[HH[mm[ss[X]]]]]]");
TemporalAccessor temporalAccessor = formatter.parseBest("D:20020101",
ZonedDateTime::from,
LocalDateTime::from,
LocalDate::from,
Month::from,
Year::from
);
我希望這會產生一個 LocalDate 物件,但我得到的是java.time.format.DateTimeParseException: Text 'D:20020101' could not be parsed at index 2.
我對此進行了一些嘗試,發現在開始時使用可選文字一切正常,但是一旦添加可選日期組件,就會出現例外。
誰能告訴我我做錯了什么?
提前致謝!
uj5u.com熱心網友回復:
我找到了一個解決方案:
String dateString = "D:20020101120000 01'00'";
String normalized = dateString.replace("'", "");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("['D:']ppppy[ppM[ppd[ppH[ppm[pps[X]]]]]]");
TemporalAccessor temporalAccessor = formatter.parseBest(normalized,
OffsetDateTime::from,
LocalDateTime::from,
LocalDate::from,
YearMonth::from,
Year::from
);
看起來,組件的長度是模棱兩可的,因此在沒有任何分隔符的情況下決議日期失敗。在指定填充時,每個組件的長度都被明確說明,因此可以決議日期。
至少這是我的理論。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521398.html
