本问题已经有最佳答案,请猛点这里访问。

我想计算2个时间戳之间有多少天的差异,但我不想考虑时差。

例如 :

long time1 = 1546258765000  (Mon 31 December 2018 13:19:25)

long time2 = 1546005915367 (Fri 28 December 2018 15:05:15)

结果应该还有3天,3天到期......

由于时间我从这个方法得到2:

TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))

我只需要为time1和time2设置相同的时间,然后回到时间戳并按此计算...但我不确定最好的方法是什么。

你在哪个时区? 好像你在UTC偏移+01:00? 您需要确定一个时区,以便将long值转换为日期。

将millis转换为LocalDateTime,然后计算Duration:

LocalDateTime start = LocalDateTime

.ofInstant(Instant.ofEpochMilli(1546005915367L), ZoneId.systemDefault())

.truncatedTo(ChronoUnit.DAYS);

LocalDateTime stop = LocalDateTime

.ofInstant(Instant.ofEpochMilli(1546258765000L), ZoneId.systemDefault())

.truncatedTo(ChronoUnit.DAYS);

Duration duration = Duration.between(start, stop);

long dayDifference = duration.toDays();

非常感谢您的帮助!

此答案中的代码中的truncatedTo调用对于获得精确结果至关重要(另一种方法是转换为LocalDate,因为这也会截断)。

注意:正如Ole V.V所述:这仅适用于UTC。由于时间戳始终是UTC,如果您在另一个时区,它可能会返回不需要的结果。例:

在GMT + 1:

time1 = 1546216200000L (Mon 31 December 2018 01:30:00) (31/12 00:30 on UTC)

time2 = 1545953400000L (Fri 28 December 2018 00:30:00) (27/12 11:30 on UTC)

这将导致4天的差异,因为这是UTC的差异。

为了弥补这一点,您应该抵消差异,以便时间戳显示当前时间,而不是UTC时间。 (例如,如果您使用的是GMT + 1,则需要为每个时间戳添加1小时(3600000 ms))。

我相信最简单的方法可能是使用模块:

final long MILLIS_PER_DAY = 1000*60*60*24;

long time1 = 1546258765000L; // (Mon 31 December 2018 13:19:25)

long time2 = 1546005915367L; // (Fri 28 December 2018 15:05:15)

// Set both times to 0:00:00

time1 -= time1 % MILLIS_PER_DAY;

time2 -= time2 % MILLIS_PER_DAY;

然后

TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))

应该给你想要的结果。

time1%MILLIS_PER_DAY始终为0

不,不是。我只是测试它以防万一我输入错误的东西,但它完美无缺

你完全正确,这是我的错,非常感谢你的帮助

这将给出UTC的预期结果。在其他时区,它有时会,有时结果将是一天太多或太少。该算法非常适合我的口味。我宁愿把更多的工作留给库方法。

@ OleV.V。实际上它会将两个时间戳设置为同一时间,因此时区并不重要,它总是可以正常工作(因为我们不关心日期,只关注差异)。我通常尽量避免使用库方法,这是一个简单的任务,我不喜欢我的程序太重

我在欧洲/哥本哈根时区。我用time1 = 1546216200000L(2018年12月31日01:30:00)和time2 = 1545953400000L(2018年12月28日00:30:00)尝试了你的代码。预期差异:3天。印刷差异:4天。您的代码在UTC之外提供了错误的结果

@ OleV.V。你是对的,我没有真正考虑过这个案子,谢谢你指出来。编辑答案澄清这一点,并添加了一个解决方案

使用joda-time lib:

long time1 = 1546258765000L;

long time2 = 1546005915367L;

DateTime dateTime1 = new DateTime(time1);

DateTime dateTime2 = new DateTime(time2);

int hours = Hours.hoursBetween(dateTime2, dateTime1).getHours();

int days = hours % 24 == 0 ? hours / 24 : hours / 24 + 1;

System.out.println(days);

joda-time lib有两次计算天数的方法,但结果不是你想要的:

Days.daysBetween(dateTime1,dateTime2).getDays()

将给定单位的给定持续时间转换为此单位。

从较细粒度到较粗粒度的转换会截断,因此会失去精度。例如,将999毫秒转换为秒会导致0。

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html#convert(long,%20java.util.concurrent.TimeUnit)

我相信他知道这一点,至少在他知道他必须将两个日期设置为同一时间的意义上。

java timestamp时间差_关于datetime:如何在java中找到2个时间戳之间的日差相关推荐

  1. java lua脚本_请问该如何在Java中使用Lua脚本语言?

    如何在Java中使用Lua脚本语言是本文要介绍的内容,主要是来学习LUA脚本语言在JAVA中如何来使用,Lua就不说了, 现在比较热门, 语法也很简单. 为了在Java中调用, 折腾了比较长的时间, ...

  2. java opencsv 乱码_教你如何在Python中读,写和解析CSV文

    摘要:在这篇文章中关于"在Python如何阅读CSV文件"中,我们将学习如何读,写和解析的CSV文件的Python. 您知道将表格数据存储到纯文本文件背后的机制是什么吗?答案是CS ...

  3. python两个时间内的工作日_如何在Python中找到两个日期之间的星期一或任何其他工作日的数目?...

    这是高效的-即使在开始和结束之间有一万天的时间-而且仍然非常灵活(它在sum函数内最多迭代7次):def intervening_weekdays(start, end, inclusive=True ...

  4. Java计算时间差_传统的SimpleDateFormat类

    Java计算时间差_传统的SimpleDateFormat类 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd ...

  5. rstudio中位数的公式_如何在R中找到中位数

    rstudio中位数的公式 In this tutorial, let's learn how we can find the median in R. Median is defined as th ...

  6. 如何在python中找到两个日期时间对象之间的时差?

    本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...

  7. 如何在Go中找到一个对象的类型?

    本文翻译自:How to find a type of an object in Go? How do I find the type of an object in Go? 如何在Go中找到对象的类 ...

  8. 如何在 R 中找到 F 临界值

    当您进行 F 检验时,您将获得 F 统计量作为结果.要确定 F 检验的结果是否具有统计显着性,可以将 F 统计量与 F 临界值进行比较.如果 F 统计量大于 F 临界值,则检验结果具有统计显着性. F ...

  9. 如何在javascript中生成1到10之间的随机数

    在这篇文章中,我们将看到如何在 javascript 中生成 1 到 10 之间的随机数. 如何在javascript中生成1到10之间的随机数 我们可以简单地使用 Math.random() 方法在 ...

最新文章

  1. 第二课_课后习题解答
  2. UVA10534-----Wavio Sequence-----动态规划之LIS
  3. python2.7抓取豆瓣电影top250
  4. 111 第一章操作系统概述总结思维导图+错题整理
  5. Magento教程 18:Magento功能导览(2) 展示商品
  6. 错误记录(12):No 'Access-Control-Allow-Origin' header is present on the requested resource.
  7. OSPFv3中LSA详解(三)——Network LSA变化
  8. day21 re模块
  9. redis简介与常用数据类型介绍
  10. ppt矩形里面的图片怎么放大缩小_PPT图片局部放大技巧
  11. Gauss光束在空间中的分布
  12. Python如何安装OpenCV库
  13. Logstash:使用 mutate 过滤器
  14. 编写函数swap实现两个数据的互换,形参分别指针和引用
  15. 《Pytorch 模型推理及多任务通用范式》_第3节课
  16. 递归实现n阶螺旋矩阵问题
  17. mysql日志备份命令是什么_mysql的常用命令以及备份和恢复
  18. 谷歌浏览器怎么同步收藏夹,书签云帮助你
  19. 记:应聘深信服科技 C++工程师(南京)
  20. 机器人学回炉重造(2-3):基本雅可比矩阵与其他雅可比矩阵

热门文章

  1. e300氛围灯哪里调节_奥迪Q5L安装原厂32色20灯源氛围灯
  2. redis 依赖_springboot|springboot集成redis缓存
  3. centos8更换yum源_基于yum进行linux系统升级--从Centos7升级到Centos8
  4. Python基础入门:endswith() 函数
  5. Python常用模块之序列化模块
  6. Python零基础教程:函数和类内建魔法属性
  7. Python创建一个循环链表、双向循环链表
  8. python基础教程:while循环与运算符和编码
  9. python实现ldap接入
  10. python中的del,remove,pop有什么区别