如何在Java中转换包含时区CEST的日期格式

如何在Java中转换包含时区CEST的日期格式,java,date,wicket,Java,Date,Wicket,我从wicket获得了Java无法转换的dateformat: 2020年4月20日星期一00:00:00 CEST 问题是CEST不是Java支持的时区。我试过CST什么应该有效,但没有。错误是: 不可解析日期:“2020年4月20日星期一00:00:00 CST” 代码: 我需要将此日期转换为JSON格式,以便yyyy-MM-dd 我如何才能做到这一点?这对我来说很有用: String dateStr=“Mon Apr 20 00:00:00 CEST 2020”; DateTimeForm

我从wicket获得了Java无法转换的dateformat:

2020年4月20日星期一00:00:00 CEST

问题是CEST不是Java支持的时区。我试过CST什么应该有效,但没有。错误是:

不可解析日期:“2020年4月20日星期一00:00:00 CST”

代码:

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

我如何才能做到这一点?

这对我来说很有用:

String dateStr=“Mon Apr 20 00:00:00 CEST 2020”;
DateTimeFormatter formatter=DateTimeFormatter.of模式(“EEE MMM d H:mm:ss zzz yyyy”,Locale.ENGLISH);
ZonedDateTime parsedDate=ZonedDateTime.parse(dateStr,格式化程序);
System.out.println(parsedDate);
System.out.println(parsedDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
上述输出为:
2020-04-20T00:00+02:00[欧洲/巴黎]
2020-04-20

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

这对我来说很有效:

String dateStr=“Mon Apr 20 00:00:00 CEST 2020”;
DateTimeFormatter formatter=DateTimeFormatter.of模式(“EEE MMM d H:mm:ss zzz yyyy”,Locale.ENGLISH);
ZonedDateTime parsedDate=ZonedDateTime.parse(dateStr,格式化程序);
System.out.println(parsedDate);
System.out.println(parsedDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
上述输出为:
2020-04-20T00:00+02:00[欧洲/巴黎]
2020-04-20


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

您使用什么代码进行转换?请通过编辑将其添加到您的问题中(提供了代码格式工具)。我添加了代码。我建议您不要使用
DateFormat
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,前两个类尤其麻烦。而是使用
ZonedDateTime
DateTimeFormatter
,这两种格式都来自。真的吗?您正在询问为什么模式
“yyyy-MM-dd”
无法解析文本
“CST 2020年4月20日星期一00:00:00”
。它们看起来有点相似吗?文本
“2020-04-20”
符合该模式。您使用什么代码进行转换?请通过编辑将其添加到您的问题中(提供了代码格式工具)。我添加了代码。我建议您不要使用
DateFormat
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,前两个类尤其麻烦。而是使用
ZonedDateTime
DateTimeFormatter
,这两种格式都来自。真的吗?您正在询问为什么模式
“yyyy-MM-dd”
无法解析文本
“CST 2020年4月20日星期一00:00:00”
。它们看起来有点相似吗?文本
“2020-04-20”
符合这种模式。哇,它也适合我。谢谢!第二种格式模式在
DateTimeFormatter
中预定义为常量。所以不需要定义模式“yyyy-MM-dd”。哇,它对我也很有用。非常感谢!您的第二个格式模式在
DateTimeFormatter
中预定义为常量。所以不需要定义模式“yyy-MM-dd”。
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()));