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

2020-09-14 22:28:09 +08:00
 wleexi
{
    "timers": [
        {
            "dayofWeek": "1",
            "startTimeofDay": "20:50"
        },
        {
            "dayofWeek": "3",
            "startTimeofDay": "20:50"
        },
        {
            "dayofWeek": "4",
            "startTimeofDay": "23:50"
        }
    ]
}

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX