我在将字符串格式化为ZonedDateTime时遇到麻烦。 我的客户希望使用ddMMyyyyhhmmss之类的日期作为日期,而没有分隔符或类似的内容。 这是我到目前为止所做的
import java.time.format.DateTimeFormatter; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; public class MyClass { public static void main(String args[]) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyyhhmmss"); String test = formatter .format(ZonedDateTime.now()).toString(); System.out.println(test); ZonedDateTime a = ZonedDateTime.parse(test,formatter); System.out.println(a.toString()); } }
当它正确生成字符串时,在创建LocalDateTime变量的解析过程中会发生错误
28032019100707 Exception in thread "main" java.time.format.DateTimeParseException: Text '28032019100707' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {MilliOfSecond=0, MinuteOfHour=7, HourOfAmPm=10, NanoOfSecond=0, MicroOfSecond=0, SecondOfMinute=7},ISO resolved to 2019-03-28 of type java.time.format.Parsed at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855) at java.time.ZonedDateTime.parse(ZonedDateTime.java:597) at MyClass.main(MyClass.java:14) Caused by: java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: {MilliOfSecond=0, MinuteOfHour=7, HourOfAmPm=10, NanoOfSecond=0, MicroOfSecond=0, SecondOfMinute=7},ISO resolved to 2019-03-28 of type java.time.format.Parsed at java.time.ZonedDateTime.from(ZonedDateTime.java:565) at java.time.format.Parsed.query(Parsed.java:226) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) ... 2 more Caused by: java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: {MilliOfSecond=0, MinuteOfHour=7, HourOfAmPm=10, NanoOfSecond=0, MicroOfSecond=0, SecondOfMinute=7},ISO resolved to 2019-03-28 of type java.time.format.Parsed at java.time.ZoneId.from(ZoneId.java:466) at java.time.ZonedDateTime.from(ZonedDateTime.java:553) ... 4 more Command exited with non-zero status 1
在SO上搜索,我发现对同一问题的一些答案建议使用LocalDateTime类作为中间类,然后解析为ZonedDateTime,但它仍然无法正常工作,并抛出相同的错误。我还尝试通过此过程更改初始化DateTimeFormatter的方式
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("ddMMyyyyhhmmss") .toFormatter() .withZone(ZoneId.systemDefault());
但是它仍然无法正常工作。我知道我肯定会缺少一些愚蠢的东西,但是我看不到。有人能指出我正确的方向吗?
你要 :
String test = ZonedDateTime.now().format(formatter);