V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wleexi
V2EX  ›  程序员

请教一个关于 Java 比较时间多问题

  •  
  •   wleexi · 2020-09-14 22:28:09 +08:00 · 1802 次点击
    这是一个创建于 1534 天前的主题,其中的信息可能已经有所发展或是发生改变。
    {
        "timers": [
            {
                "dayofWeek": "1",
                "startTimeofDay": "20:50"
            },
            {
                "dayofWeek": "3",
                "startTimeofDay": "20:50"
            },
            {
                "dayofWeek": "4",
                "startTimeofDay": "23:50"
            }
        ]
    }
    

    有如上的 JSON 串。dayofWeek 表示周几,startTimeofDay 代表了指定的 dayofWeek 的时间。 需要从程序运行时间的年月日,是否有符合未来 24 小时的时间,如果有则选出没有则不反悔。 这样要怎么计算才合理。

    10 条回复    2020-09-15 16:03:47 +08:00
    chocovon
        1
    chocovon  
       2020-09-14 22:43:58 +08:00
    dayofWeek 为 1,当天是 7,这算未来 24 小时吗?
    wleexi
        2
    wleexi  
    OP
       2020-09-14 22:46:23 +08:00
    @chocovon 我不知道能不能理解你的意思 ,现在是周一,需要在串中负责当前时间未来 24 小时候内的记录。
    StopTheWorld
        3
    StopTheWorld  
       2020-09-14 22:52:53 +08:00
    周一是本周一还是下周一。感觉用 LocalDateTime 挺简单的。
    wleexi
        4
    wleexi  
    OP
       2020-09-14 23:06:39 +08:00
    @StopTheWorld 看当前时间,如果和当前是周一,那么就是今天,如果已经过了,那么就是下周了。
    nvioue
        5
    nvioue  
       2020-09-14 23:13:33 +08:00
    把这些时间排个序 2 分查找 ??? 难点在哪里? 还是我理解错了
    chendy
        6
    chendy  
       2020-09-14 23:54:17 +08:00
    LocalDateTime 可做,算出时间,和当前时间取 Duration,判断是不是大于一天
    星期几没有现成方法,自己判断本周还是下周去 plusDays 就可以了
    wleexi
        7
    wleexi  
    OP
       2020-09-15 09:43:20 +08:00
    @chendy 出现跨年,跨月的时候怎么生成 LocalDateTime 呢
    aguesuka
        8
    aguesuka  
       2020-09-15 12:55:34 +08:00 via Android
    过得 todayOfWeek 和 tomorrowOfWeek,遍历,如果是今天,看 LocalTime 是否晚于现在,如果是明天,看时间是否早于现在
    aguesuka
        9
    aguesuka  
       2020-09-15 13:01:41 +08:00 via Android
    //自己初始化以下参数
    DayOfWeek today,tomorrow;
    LocalTime now;

    list.stream().
    anyMatch(time-> time.dayofWeek.equals(today)&&time.startTimeofDay.isAfter(now)
    ||time.dayodWeek.eqauls(tomorrow)&&time.startTimeofDay.isBefor(now))
    wleexi
        10
    wleexi  
    OP
       2020-09-15 16:03:47 +08:00
    ```java

    List<TimeRecord> timeRecordList = JSONObject.parseObject(recordsDesc, new TypeReference<List<TimeRecord>>() {});
    for (TimeRecord oneRecordTime : timeRecordList) {
    DayOfWeek dayOfWeek = DayOfWeek.of(oneRecordTime.getDayofWeek());
    LocalTime recordTime = oneRecordTime.getStartTimeofDay();
    LocalDateTime recordDateTime = nowDateTime.
    with(TemporalAdjusters.nextOrSame(dayOfWeek)).
    withHour(recordTime.getHour()).
    withMinute(recordTime.getMinute());

    long between = ChronoUnit.DAYS.between(nowDateTime,recordDateTime);
    if (between < 1) {
    return recordDateTime;
    }
    }

    @Data
    class TimeRecord{
    private Integer dayofWeek;
    private LocalTime startTimeofDay;
    }

    ```
    @aguesuka 感谢。这是我的方案。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5463 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:55 · PVG 13:55 · LAX 21:55 · JFK 00:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.