java - Gson - 无法解析的日期错误?

标签 java json date parsing gson

我有以下 JSON 和 POJO

JSON:

{
      "startDate": "2018-09-18T12:00:00+0000",
      "endDate": "2018-09-18T14:00:00+0000",
      "startDateAsDate": 15372720000000
      "endDateAsDate": 1537279200000
    }

JAVA POJO:

public class ScheduledPeriod implements Comparator<ScheduledPeriod> {

    private String startDate = "";
    private String endDate = "";
    private Date startDateAsDate;
    private Date endDateAsDate;

     public Date getStartDateAsDate() {
        if (startDateAsDate != null) {
            return startDateAsDate;
        }
        try {
            startDateAsDate = (Date) SDF.parseObject(startDate);
            return startDateAsDate;
        } catch (Exception e) {
            return null;
        }
    }

    public Date getEndDateAsDate() {
        if (endDateAsDate != null) {
            return endDateAsDate;
        }
        try {
            endDateAsDate = (Date) SDF.parseObject(endDate);
            return endDateAsDate;
        } catch (Exception e) {
            return null;
        }
    }
}

尝试使用 GSON 解析 JSON:

ScheduledPeriod scheduledPeriod = null;

 try {
            scheduledPeriod = new Gson().fromJson(jsonRequest, new TypeToken<ScheduledPeriod>() {
            }.getType());
        } catch (Exception e) {

        }

我收到错误:

com.google.gson.JsonSyntaxException: 1537272000000
java.text.ParseException: Unparseable date: "1537272000000"

为什么我会收到上述错误?日期有效吗?

最佳答案

基于this post,您只需注册一个日期适配器:

Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
                public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                        throws JsonParseException {
                    return new Date(json.getAsJsonPrimitive().getAsLong());
                }
            }).create();

ScheduledPeriod scheduledPeriod = gson.fromJson(jsonRequest, ScheduledPeriod.class);

关于java - Gson - 无法解析的日期错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47534648/

相关文章:

java - 如何使用%符号格式化JTable单元格?

java - 无法在 IntelliJ 的 SDK 中添加 jdk11 和 jdk13 - java

javascript - 寻找字符串化圆形对象的好答案

javascript - 为什么使用 .map() 尝试构建 html 表不起作用?

mysql - 如何找到mysql中某列中缺失的月份?

java - 在 java swing 中组件移动完成后想要记录一次组件位置

c# - JsonConvert.DeserializeObject 特殊字符 未终止的字符串。预期的分隔符 :

javascript - 如何 JSON 字符串化 javascript 日期并保留时区

c# - 不同日期列表

Java 包内省(introspection)