我正在安卓工作室上建立一个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,您可以进行比较。您也可以在几个月内应用相同的逻辑,但您需要定义一个月内要考虑的天数。