gpt4 book ai didi

java - 用于 GsonBuilder 日期格式的正确日期格式

转载 作者:行者123 更新时间:2023-11-30 09:59:21 26 4
gpt4 key购买 nike

我的客户以“2019-11-22T16:16:31.0065786+00:00”格式向我发送日期。我收到以下错误:

java.text.ParseException: Unparseable date: "2019-11-22T16:16:31.0065786+00:00"

我使用的日期格式是:

new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ")
.create();

请让我知道要使用哪种格式。

最佳答案

这种格式可以通过DateTimeFormatter.ISO_ZONED_DATE_TIME处理DateTimeFormatter 的实例。它是 Java Time 包的一部分,与 1.8 版本一起发布。您应该使用 ZonedDateTime 来存储这样的值,但我们也可以将其转换为过时的 Date 类。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

import java.lang.reflect.Type;
import java.time.ZonedDateTime;
import java.util.Date;

public class GsonApp {

public static void main(String[] args) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(Date.class, new DateJsonDeserializer())
.registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeJsonDeserializer())
.create();

System.out.println(gson.fromJson("{\"value\":\"2019-11-22T16:16:31.0065786+00:00\"}", DateValue.class));
}
}

class DateJsonDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
ZonedDateTime zdt = ZonedDateTime.parse(json.getAsString());

return Date.from(zdt.toInstant());
}
}

class ZonedDateTimeJsonDeserializer implements JsonDeserializer<ZonedDateTime> {
@Override
public ZonedDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return ZonedDateTime.parse(json.getAsString());
}
}

class DateValue {
private ZonedDateTime value;

public ZonedDateTime getValue() {
return value;
}

public void setValue(ZonedDateTime value) {
this.value = value;
}

@Override
public String toString() {
return "DateValue{" +
"value=" + value +
'}';
}
}

以上代码打印:

DateValue{value=2019-11-22T16:16:31.006578600Z}

当您在 DateValue 类中将 ZonedDateTime 更改为 Date 时,它将根据您的时区打印此日期。

另见:

关于java - 用于 GsonBuilder 日期格式的正确日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58999880/

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