【问题标题】:How to convert date format containing timezone CEST in Java [duplicate]如何在Java中转换包含时区CEST的日期格式[重复]
【发布时间】:2020-04-20 17:05:46
【问题描述】:

我从 wicket 获得了 Java 无法转换的日期格式:

Mon Apr 20 00:00:00 CEST 2020

问题在于 CEST 不是 Java 支持的时区。我已经尝试过 CST 什么应该起作用,但它没有。错误是:

无法解析的日期:“Mon Apr 20 00:00:00 CST 2020”

代码:

DateFormat dateFormat = new SimpleDateFormat(
        "yyyy-MM-dd", Locale.GERMANY);
dateFormat.parse("Mon Apr 20 00:00:00 CST 2020");
System.out.println(dateFormat.format(new Date()));

我需要将此日期转换为 JSON 格式,以便 yyyy-MM-dd。

我该怎么做?

【问题讨论】:

  • 您使用什么代码进行转换?请通过编辑将其添加到您的问题中(提供了代码格式化工具)。
  • 我添加了代码
  • 我建议你不要使用DateFormatSimpleDateFormatDate。这些类的设计很差而且已经过时了,尤其是前两个是出了名的麻烦。而是使用来自java.time, the modern Java date and time APIZonedDateTimeDateTimeFormatter
  • 真的吗?你问为什么模式"yyyy-MM-dd" 不能解析文本"Mon Apr 20 00:00:00 CST 2020"。他们看起来甚至有点相似吗?文本 "2020-04-20" 将符合该模式。

标签: java date wicket


【解决方案1】:

这对我有用:

        String dateStr = "Mon Apr 20 00:00:00 CEST 2020";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d H:mm:ss zzz yyyy", Locale.ENGLISH);
        ZonedDateTime parsedDate = ZonedDateTime.parse(dateStr, formatter);
        System.out.println(parsedDate);
        System.out.println(parsedDate.format(DateTimeFormatter.ISO_LOCAL_DATE));

上面的输出是:2020-04-20T00:00+02:00[Europe/Paris]2020-04-20

我认为诀窍在于你需要一个格式化程序来解析这个日期,因为它是一种非常奇怪的格式,它使用字符串末尾的年份以及日期的其余部分之间的小时/分钟/秒。默认日期/时间解析不起作用。

【讨论】:

  • 哇,它也对我有用。非常感谢!
  • 您的第二个格式化模式在DateTimeFormatter 中预定义为常量ISO_LOCAL_DATE。所以不需要定义模式`yyyy-MM-dd"。
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2014-07-18
  • 2022-11-13
相关资源
最近更新 更多