我在将字符串格式化为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);
我有一个以下格式的日期,我需要解析它,并转换成一个纪元时间。 关于我做错了什么有什么帮助吗?
当我这样做的时候 如何解析datetime字符串,以便将其解释为始终来自时区“欧洲/柏林”?
问题内容: 当我这样做时 我得到以下异常: 如何解析日期时间字符串,以便将其始终解释为来自“欧洲/柏林”时区? 问题答案: 问题在于,a 和a 之间存在差异。要创建一个,您需要一个区域偏移量。但是,a和a之间没有一对一的映射关系,因为它实际上取决于当前的夏时制时间。对于ZoneId像“欧洲/柏林”一样的商品,夏季有一个偏移量,而冬季有一个不同的偏移量。 在这种情况下,使用代替会更容易。在解析期间,
我经常遇到这样的异常: 我做错了什么?
我有一个数据输入流,它包含格式为“yyyy-mm-dd hh:mm:ss z”的日期,其中需要在进一步传播日期时保留时区。下面是测试程序(带有错误堆栈)--我的解决方案有什么问题? 输出(异常消息): 第一种方法中的异常:无法解析文本“2016-12-09 09:30:21 UTC”:无法从TemporalAccessor获取ZonedDateTime:{HourofamPM=9,MinuteOf
我有这段代码: 但我在解析时出现了这个错误: