为了账号安全,请及时绑定邮箱和手机立即绑定

使用 GSON 反序列化 json 时间戳

使用 GSON 反序列化 json 时间戳

米琪卡哇伊 2021-10-20 15:12:56
我有一个 json 字符串,例如{"start_time": "10:00 AM", "end_time": "11:00 PM"}如果我使用 GSON 使用 POJO 反序列化,那么如您所见,这些将映射到我的类中的 String 变量。最终,我想使用用户提供的时间,看看它是否在范围内。我能想到的唯一方法是,每次我得到时间,然后我将这些字符串变量转换为对象(无论是 Joda 时间、日期、本地时间 .. 等),然后进行比较。有没有更好的办法?我可以让 GSON 将字符串直接反序列化为时间对象吗?或者以某种方式保存在比较期间始终进行这些转换的步骤?或者我提出的方式真的是正确的设计?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

您可以使用GsonBuilder将时间解析为日期,指定日期格式:


    GsonBuilder gsonBuilder = new GsonBuilder();

    gsonBuilder.setDateFormat("HH:mm a");

    Gson gson = gsonBuilder.create();

    Pojo fromJson = gson.fromJson(<string>, Pojo.class);

POJO 字段将如下所示(如果需要,请重命名):


    private Date start_time;

    private Date end_time;


查看完整回答
反对 回复 2021-10-20
?
DIEA

TA贡献1820条经验 获得超2个赞

你对图书馆要求不高。您可以自己用纯 Java 编写该类,因为您只比较一天中的 24 小时。你可以这样:


public class TimeKeeper implements Comparable<TimeKeeper> {

    byte startHour;

    byte startMinute;

    byte endHour;

    byte endMinute;

    public TimeKeeper(String start, String end) {

        startHour = parseHour(start);

        startMinute = parseMinute(start);

        endHour = parseHour(end);

        endMinute = parseMinute(end);

    }

    public byte parseHour(String time) {

        byte hour = Byte.valueOf(String.split(time, ":")[0]);

        if(time.contains("PM") {

            hour += 12;

        }

        return hour;

    }

    public byte parseMinute(String time) {

         return Byte.valueOf(String.valueOf(time, ":")[1].substring(0, 2));

    }

    @Override

    public int compareTo(TimeKeeper tk) {

        int diff = startHour - tk.startHour;

        if(diff == 0) {

            return startMinute - tk.startMinute;

        }

        return diff;

    }

}


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 377 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信