当前位置: 首页 > 知识库问答 >
问题:

Java8-ZonedDateTime,DateTimeFormatter无法识别格式

窦啸
2023-03-14

我使用Java8的ZonedDateTime和DateTimeFormatter。当我试图解析自己的模式时,它无法识别并抛出异常

    String oraceDt = "1970-01-01 00:00:00.0";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
    ZonedDateTime dt = ZonedDateTime.parse(oraceDt, formatter);

Exception in thread "main" java.time.format.DateTimeParseException: Text '1970-01-01 00:00:00.0' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {},ISO resolved to 1970-01-01T00:00 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at com.timezone.Java8DsteTimes.testZonedDateTime(Java8DsteTimes.java:31)
at com.timezone.Java8DsteTimes.main(Java8DsteTimes.java:11)

共有1个答案

吕征
2023-03-14

您希望创建一个始终引用时区的ZonedDateTime,但是您的输入不包含这样的信息,而且您也没有指示格式化程序在输入缺少区域的情况下使用默认时区。您的问题有两种解决方案:

>

  • 指示解析器使用时区(这里使用系统tz作为示例):

    String oraceDt = "1970-01-01 00:00:00.0";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
    ZonedDateTime zdt = 
      ZonedDateTime.parse(oraceDt, formatter.withZone(ZoneId.systemDefault()));
    System.out.println(zdt); // in my default zone => 1970-01-01T00:00+01:00[Europe/Berlin]
    

    使用另一种不需要时区的结果类型(此处LocalDateTime):

    String oraceDt = "1970-01-01 00:00:00.0";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
    LocalDateTime ldt = LocalDateTime.parse(oraceDt, formatter);
    System.out.println(ldt); // 1970-01-01T00:00
    

  •  类似资料:
    • 因此,我希望这段代码能够在新的Java8date/time包下工作,因为它所做的只是将给定的ZonedDateTime转换成字符串,然后使用相同的内置DateTimeFormatter实例(ISO_INSTANT)返回: 但显然不是: 我已经看到了这个条目,但它对我没有帮助,因为a需要一个ZonedDateTime对象,而不是本地对象,还因为我已经安装了8U20:无法使用DateTimeForma

    • 问题内容: 我最近迁移到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

    • 在VS 2013中,如果我单击以下文件类型,我会不断得到此错误: *.cs *.cshtml *.config *.asax *.html 我最近刚刚更新到Visual Studio 2013 Update 2,并修复了一个兼容性问题,即总是以管理员身份运行“devenv.exe”,因为UAC问题和在windows 8.1中运行服务。然而;我可以在SharpDevelop4.4中打开整个解决方案,

    • 我有以下序列

    • 我不确定这是否是一个与我没有这台计算机的管理权限有关的问题。任何帮助,以便我可以进一步排除故障,将非常感谢! 谢谢