gpt4 book ai didi

java - Gson:java.text.ParseException:无法解析的日期: "2018-04-09T09:00:00+02:00"

转载 作者:行者123 更新时间:2023-12-02 11:23:57 26 4
gpt4 key购买 nike

如何解析以下格式的字符串日期:

"2018-04-09T09:00:00+02:00"

Gson 使用:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US)

但它给出了以下异常:

    com.google.gson.JsonSyntaxException: 2018-04-09T09:00:00+02:00
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:107)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:82)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:35)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:95)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:183)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:95)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:183)
at com.google.gson.Gson.fromJson(Gson.java:805)
at com.google.gson.Gson.fromJson(Gson.java:743)
... 35 more
Caused by: java.text.ParseException: Unparseable date: "2018-04-09T09:00:00+02:00"
at java.text.DateFormat.parse(DateFormat.java:337)
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:105)
... 52 more

提前致谢。

最佳答案

您将 Z 放在引号内 ('Z')。如果你take a look at the javadoc ,你会看到:

Text can be quoted using single quotes (') to avoid interpretation

这意味着您的格式化程序需要字母 Z(而不是 +02:00 等其他值),这就是您收到错误的原因。

在同一个javadoc页面中,我们可以看到解析偏移量的模式字母(+02:00部分)是X,所以你的格式化程序应该是这样的:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US);

正如评论中所注意到的,模式 X 仅在 java 7 中引入。在旧版本中,唯一的方法是分割字符串并将格式化程序中的偏移量设置为 时区:

String input = "2018-04-09T09:00:00+02:00";
Pattern pattern = Pattern.compile("(.*)([\\+|\\-]\\d{2}:\\d{2})");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
// timezone will be GMT+02:00
sdf.setTimeZone(TimeZone.getTimeZone("GMT" + matcher.group(2)));
// parse date without the offset part
Date date = sdf.parse(matcher.group(1));
}
<小时/>

正如评论中所述,您还可以使用 Threeten 反向移植:http://www.threeten.org/threetenbp/

这是 java 8 的日期/时间类的向后移植,它更好、更容易使用:

OffsetDateTime odt = OffsetDateTime.parse("2018-04-09T09:00:00+02:00");

如果您仍然需要使用java.util.Date,很容易进行转换:

Date date = DateTimeUtils.toDate(odt.toInstant());

关于java - Gson:java.text.ParseException:无法解析的日期: "2018-04-09T09:00:00+02:00",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49729711/

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