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



我正在安卓工作室上建立一个SQLite数据库,用于存储计划项目,每个项目都包含一个长日期变量(以毫秒为单位的日期(。

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

weekApart(1621548000000、1622073600000(=真,等

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

有人知道怎么做吗?谢谢你的回答。

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

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

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

    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);

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

首先,你可以将你的长号码转换为日历:

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

接下来,你可以找到天数的差异:

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

最后,如果差异在一周内大于7,您可以进行比较。您也可以在几个月内应用相同的逻辑,但您需要定义一个月内要考虑的天数。

相关内容

  • 没有找到相关文章

最新更新