0

我正在尝试使用特定格式解析当前时间戳,但每次尝试我都会得到一个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但没有帮助。

4

4 回答 4

2

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

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

这印

2018-02-27T21:48:16.214832+08:00[亚洲/吉隆坡]

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

    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. 相反的转换称为格式化,将日期时间对象转换为特定格式的字符串,通常用于人类可读性或数据交换。

于 2018-02-27T13:50:20.047 回答
1

日期时间格式

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

于 2018-02-27T10:26:28.207 回答
0

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

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);
于 2018-02-27T10:29:11.990 回答
0

可以直接使用 ZonedDateTime 的格式化函数。例如:

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

你也可以看看:

于 2018-02-27T10:39:23.040 回答