繁体   English   中英

用Java中的DateTimeFormatter解析ZonedDateTime.now()

[英]Parse ZonedDateTime.now() with DateTimeFormatter in Java

我正在尝试使用特定格式来解析当前时间戳,但是每次尝试我都会不断获取java.time.format.DateTimeParseException 我的代码:

ZonedDateTime.parse(
    ZonedDateTime.now().toString(),
    DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss.SSS")
            .withZone(ZoneId.of("UTC")) //I also tried ZoneId.systemDefault()
)

结果:

java.time.format.DateTimeParseException:
Text '2018-02-27T11:01:18.776+01:00[Europe/Berlin]' could not be parsed at index 2

问题是为什么我不能以所需的格式解析它,以及如何实现?

PS我也看到了这篇文章,并尝试设置ZoneId但没有帮助。

要解析ZonedDateTime.toString()的结果,您根本不需要显式的格式化程序:

    System.out.println(ZonedDateTime.parse(
            ZonedDateTime.now(ZoneId.of("Asia/Kuala_Lumpur")).toString()));

这印

2018-02-27T21:48:16.214832 + 08:00 [Asia / Kuala_Lumpur]

您问题中的格式化程序非常适合格式化:

    System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Kuala_Lumpur"))
            .format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss.SSS")));

打印:

27.02.2018 21:48:16.237

您是否混淆了用法一词? 解析意味着分析字符串以使其有意义,在这种情况下,将其转换为日期时间对象,例如ZonedDateTime 相反的转换称为格式化 ,即将日期时间对象转换为特定格式的字符串,通常用于人类可读性或数据交换。

DateTimeFormat

"dd.MM.yyyy HH:mm:ss.SSS"
与不符
  '2018-02-27T11:01:18.776 + 01:00 [欧洲/柏林]' 
由。。。生产
  ZonedDateTime.now()。toString() 

这应该用于转换now()结果String-> Date ,因为正确的格式化程序已经在JDK中:

String inputStr = ZonedDateTime.now().toString();
ZonedDateTime parsed = ZonedDateTime.parse(inputStr, DateTimeFormatter.ISO_DATE_TIME) 


System.out.println(parsed);

如果您想绕开其他方向,则通过以下方式转换Date- > String

 DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss.SSS");

        String parsed = pattern.format(ZonedDateTime.now());
        System.out.println(parsed);

您可以直接使用ZonedDateTime的格式功能。 例如:

String dateString = ZonedDateTime.now().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);

您还可以查看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM