gpt4 book ai didi

Java simpledateformat 无法解析的日期,即使格式看起来是正确的

转载 作者:行者123 更新时间:2023-11-29 03:08:45 26 4
gpt4 key购买 nike

我有一个愚蠢的问题,这是我的代码:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ",Locale.US);
System.out.println(dateFormat.format(new Date()));
try {
wou.setDateStart(dateFormat.parse(date));
wou.setDateEnd(dateFormat.parse(date));
} catch (ParseException e) {
System.out.println(e.getCause() + " " + e.getMessage());
e.printStackTrace();
}

结果如下:

2015 年 6 月 5 日星期五 15:34:29 GMT+0000

null 无法解析的日期:“2015 年 6 月 5 日星期五 17:30:00 GMT+0000”

我的格式有什么问题?它以与我要解析的日期相同的格式输出当前日期,但一直告诉我该日期无法解析...

我为此苦苦挣扎了一个多小时,我完全迷失了......

编辑:

我无法控制我需要解析的日期(如果我这样做了,我会在源代码中将其更改为我可以使用的格式)

以下代码:

String date = request.getParameter("absencyDate");
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z",Locale.US);
try {
System.out.println(dateFormat.format(new Date()));
System.out.println(date);
System.out.println(dateFormat.parse(date));
} catch (ParseException e1) {

产生同样的错误:

格林威治标准时间 2015 年 6 月 5 日星期五 16:09:15

2015 年 6 月 5 日星期五 12:30:00 GMT+0000

java.text.ParseException:无法解析的日期:“2015 年 6 月 5 日星期五 12:30:00 GMT+0000”

最佳答案

问题是您在日期格式中使用了 zZ。它需要一个简单的基于名称的区域 (z),然后是一个 RFC-822 区域 (Z)。

如果默认时区(或格式中设置的时区)不是 GMT,它会很好地工作,因为它只是解析到那个点(匹配 z),然后解析+0000 作为 Z

但是当时区是 GMT 时,它实际上会尝试将其后的部分 (+0000) 解析为 z 的一部分,因为“GMT+hh: mm"是 z 的有效区域,但失败了。

日期格式看似正确。但是结合两种时区格式不是。它应该是命名时区(包括“GMT+00:00”)或 RFC 822 偏移量(不包括“GMT”指定)。

在 OP 编辑​​之后进行编辑

所以你从某个地方得到了你的date参数,他们用一个非标准的区域指定发送给你。 GMT+0000 既不匹配一般时区(应为 GMTGMT+00:00),也不匹配 RFC 822 时区(应为 +0000 没有 GMT),也不是 ISO 8601 时区(应该是 +00+0000+ 00:00).

如果您知道他们将始终在他们的日期中使用 GMT,我认为您可以做的最好的事情是:

"EEE MMM dd yyyy HH:mm:ss 'GMT'Z"

它将 GMT 部分作为文字字符串而不是时区指示符,然后从其后的任何内容解释时区。

或者,如果生成该参数的源在您的控制之下,请修复其格式以使用与标准之一匹配的适当时区。

关于Java simpledateformat 无法解析的日期,即使格式看起来是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com