微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在 android studio 上设置一个 sqlite 数据库,用于存储计划的项目,每个项目都包含一个日期变量作为 long(以毫秒为单位的日期)。

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

weekApart(1621548000000,1622073600000) = true,等

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

有谁知道这是怎么做到的?感谢您的回答。

编辑:很好的答案,谢谢大家: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。您也可以在几个月内应用相同的逻辑,但您需要定义一个月内要考虑的天数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?