我有一个数据输入流,它包含格式为“yyyy-mm-dd hh:mm:ss z”的日期,其中需要在进一步传播日期时保留时区。下面是测试程序(带有错误堆栈)--我的解决方案有什么问题?
public class Test {
public static void main(String[] args) {
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 1st approach: " + e.getMessage());
}
try {
DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd hh:mm:ss z").toFormatter();
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 2nd approach: " + e.getMessage());
}
}
}
输出(异常消息):
第一种方法中的异常:无法解析文本“2016-12-09 09:30:21 UTC”:无法从TemporalAccessor获取ZonedDateTime:{HourofamPM=9,MinuteOfHour=30,MicroofSecond=0,SecondofMinute=21,nanoofSecond=0,MilliofSecond=0},ISO,UTC解析为2016-12-09,类型为java.time.format.Parsed
第二种方法中的异常:无法分析文本“2016-12-09 09:30:21 UTC”:无法从TemporalAccessor获取ZonedDateTime:{HourofamPM=9,MinuteOfHour=30,MicroofSecond=0,SecondofMinute=21,nanoofSecond=0,MilliofSecond=0},ISO,UTC解析为2016-12-09,类型为java.time.format.Parsed
JDK版本1.8.0_111
我读过zoneddatetime标签中的类似问题,但找不到解决问题的方法。
您应该使用DateTimeFormatter dtf=DateTimeFormatter.ofPattern(“yyyy-mm-dd hh:mm:ss z”);
而不是使用
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
因此模式中的h
必须是h
。根据文档,在定义clock-hour-of-am-pm
时使用h
,因此在您的模式中还应该将a
作为am-pm-of-day
,或者只使用h
我有一个以下格式的日期,我需要解析它,并转换成一个纪元时间。 关于我做错了什么有什么帮助吗?
问题内容: 我在将字符串格式化为ZonedDateTime时遇到麻烦。 我的客户希望使用ddMMyyyyhhmmss之类的日期作为日期,而没有分隔符或类似的内容。 这是我到目前为止所做的 当它正确生成字符串时,在创建LocalDateTime变量的解析过程中会发生错误 在SO上搜索,我发现对同一问题的一些答案建议使用LocalDateTime类作为中间类,然后解析为ZonedDateTime,但它
问题内容: 使用Java 1.8.0_51时,以下代码(摘自无法从TemporalAccessor获取OffsetDateTime) 引发异常: 这次我在做什么错? 问题答案: 您忘记设置时间了。 如果将我的答案与代码进行比较,您会注意到唯一的区别是时间信息丢失。一个包含时间信息,并从当前的格式不处理它,实例不能形成即可。 您还可以在包含以下内容的stacktrace中看到它 根据您的需要,您可以
问题内容: 我最近迁移到Java 8,希望能够更轻松地处理本地时间和分区时间。 但是,我认为在解析一个简单的日期时,我面临着一个简单的问题。 就我而言: fecha是‘15 / 06/2014’ ConstantesFechas.FORMATO_DIA为“ dd / MM / yyyy” obtenerZonaHorariaServidor返回ZoneId.systemDefault() 因此,这
我最近转到Java8,希望能更容易地处理本地和分区时间。 然而,在我看来,在解析一个简单的日期时,我面临着一个简单的问题。 null 这是一个简单的例子。但是,解析会抛出以下异常: java.time.format.DateTimeParseException:无法分析文本“15/06/2014”:无法从TemporalAccessor获取ZonedDateTime:{},ISO解析为类型java
当我这样做的时候 如何解析datetime字符串,以便将其解释为始终来自时区“欧洲/柏林”?