【问题标题】:Difference between two dates in android [duplicate]android中两个日期之间的差异[重复]
【发布时间】:2013-12-04 13:29:23
【问题描述】:

我正在尝试获取当前时间和某一天之间的毫秒差异,比如2013/12/25

我正在使用此代码

Calendar thatDay = Calendar.getInstance();
thatDay.set(Calendar.DAY_OF_MONTH,25);
thatDay.set(Calendar.MONTH,11); // 0-11 so 1 less
thatDay.set(Calendar.YEAR, 2013);


Calendar today = Calendar.getInstance();

long diff =  thatDay.getTimeInMillis() - today.getTimeInMillis(); 
long days = diff / (24 * 60 * 60 * 1000);

但是这段代码有时会给出正确的值,但有时会略有不同..请帮助大家

【问题讨论】:

  • 虽然不是你的答案,但我建议你看看date4j library。非常简单的 api 来获取差异和基本日期的东西。这里date4j.net
  • 你也可以查看jodatime library(joda-time.sourceforge.net/installation.html)。
  • "这段代码有时会给出正确的值有时会略有不同"有什么不同?如果你整数除以结果,你会将 3.9 天截断为 3,这将是 1 天休息。是这样吗?
  • @zapl:相差一天。 20或21。但它与长无关。你可以使用 double ,结果是 21.0 或 20.0
  • @zapl .. 是的,你说得对.. 那是我的问题..

标签: java android


【解决方案1】:

在实行夏令时的地方,一年中有一天是 23 小时,另一个是 25 小时,因此假设每天都是 24 小时是错误的。官方时区也可以更改。

解决问题的“正确”方法是使用精心设计的库,例如 Joda time,但作为一种快速修复,您可以将结果四舍五入,这样几个小时到一个方向或另一个方向的偏差就无关紧要了:

long days = Math.round((double) diff / (24 * 60 * 60 * 1000);

【讨论】:

  • thanx for your answer.. 如果我想将其转换为 day:hor:minute:seconds 格式,那我该怎么办?
  • 除非您假设每天固定的小时数,否则这种格式没有多大意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2017-04-29
  • 2014-02-12
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多