以毫秒为单位比较两个日期以检查它们是否相隔一定时间

Comparing two dates in millis to check if they are a certain time apart

我正在 android studio 上设置一个 SQLite 数据库,用于存储预定的项目,每个项目都包含一个很长的日期变量(日期以毫秒为单位)。

我正在尝试创建两个以毫秒为单位比较两个日期的函数。第一个函数检查它们是否相隔一周,另一个函数检查它们是否相隔一个月(按天计算,而不是确切时间)以便:

weekApart(1621548000000, 1622073600000) = true, 等等

我这样做是为了当用户在日历上选择一个日期时,当前时间戳被记录下来,我可以在 table 中搜索属于正确日期或月份的项目。

有谁知道如何做到这一点?感谢您的任何回答。

编辑:很好的答案,谢谢大家:D

您可能会发现两个日期之间的天数差异。

首先,您可以将长数字转换为日历:

Calendar date1 = Calendar.getInstance();
date1.setTimeInMillis(1621548000000L);

Calendar date2 = Calendar.getInstance();
date2.setTimeInMillis(1622073600000L);

接下来,您可以找出天数的差异:

long days = ChronoUnit.DAYS.between(date1.toInstant(), date2.toInstant());

最后,大家可以比较一周是否相差大于7。您也可以在几个月内应用相同的逻辑,但您需要定义一个月要考虑多少天。

嗯,这里有一些事情需要考虑。

  • 要考虑时区吗?两个日期之间有多少天,取决于您所在的时区。例如,

    2021-01-31T23:00:00Z      until 2021-02-03T11:00:00Z      is 4 days inclusive
    2021-02-01T01:00:00+02:00 until 2021-02-03T13:00:00+02:00 is 3 days inclusive
    

    两个开始时间具有相同的时间戳。结束时间也是如此。

  • 什么是月?同样,这取决于您是否要考虑时区。并且您必须知道时间戳代表的确切日期才能计算其间的月数,因为一个月的长度取决于月份甚至年份。

如果您不关心时区,您可以使用

long days = ChronoUnit.DAYS.between(Instant.ofEpochMillis(a), Instant.ofEpochMillis(b));

否则,你最终会得到类似

的东西
ZoneId zoneId = ZoneId.of("Europe/Amsterdam");
var start = Instant.ofEpochMilli(a).atZone(zoneId);
var end = Instant.ofEpochMilli(a).atZone(zoneId);
long days = ChronoUnit.DAYS.between(start, end);