java.time.format.DateTimeParseException:无法从格式为 ddMMyyyyhhmmss 的 TemporalAccessor 获取 ZonedDateTime
java.time.format.DateTimeParseException: Unable to obtain ZonedDateTime from TemporalAccessor on format ddMMyyyyhhmmss
我在将字符串格式化为 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 class 作为中间值,然后解析为 ZonedDateTime 但它仍然无法正常工作,抛出相同的错误。
我也尝试过使用此过程更改初始化 DateTimeFormatter 的方式
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("ddMMyyyyhhmmss")
.toFormatter()
.withZone(ZoneId.systemDefault());
但是还是不行。我知道我肯定错过了一些愚蠢的东西,但我看不到什么。谁能指出我正确的方向?
ddMMyyyyhhmmss
不包含任何区域信息,不是ZonedDateTime
,应该是LocalDateTime
.
在您解析的字符串中,没有关于 TimeZone 的信息 - 那么 Formatter 如何知道如何转换为 ZonedDateTime?
您要么需要在您的字符串中包含时区信息,要么使用另一个对象将其解析为没有时区信息,然后将其传输到您需要的区域。
你想要:
String test = ZonedDateTime.now().format(formatter);
我在将字符串格式化为 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 class 作为中间值,然后解析为 ZonedDateTime 但它仍然无法正常工作,抛出相同的错误。 我也尝试过使用此过程更改初始化 DateTimeFormatter 的方式
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("ddMMyyyyhhmmss")
.toFormatter()
.withZone(ZoneId.systemDefault());
但是还是不行。我知道我肯定错过了一些愚蠢的东西,但我看不到什么。谁能指出我正确的方向?
ddMMyyyyhhmmss
不包含任何区域信息,不是ZonedDateTime
,应该是LocalDateTime
.
在您解析的字符串中,没有关于 TimeZone 的信息 - 那么 Formatter 如何知道如何转换为 ZonedDateTime?
您要么需要在您的字符串中包含时区信息,要么使用另一个对象将其解析为没有时区信息,然后将其传输到您需要的区域。
你想要:
String test = ZonedDateTime.now().format(formatter);