【问题标题】:Calender Date Difference Calculation error in AndroidAndroid中的日历日期差异计算错误
【发布时间】:2015-12-13 18:44:40
【问题描述】:

我知道有多种格式的示例可以计算两个日期的差异。我尝试了一种方式。如果我输入一个月内的日期,我的答案总是正确的。如果我去寻找差异超过一个月,它就没有给出正确的答案。它总是在寻找两个日期的差异。如何找到超过 31 天或 2016-01-05 到 2015-12-13 的日期差异。

Date oldDate,newDate;
SimpleDateFormat dateFormat;

//editText1=2015-12-13
//editText2=2016-01-05

oldDate = dateFormat.parse(editText1.getText().toString());
newDate = dateFormat.parse(editText2.getText().toString());
oldDate=dateFormat.parse(dateFormat.format(oldDate));
newDate=dateFormat.parse(dateFormat.format(newDate));
long diff = newDate1.getDate() - oldDate1.getDate();
editText3.setText(""+(diff+1));

【问题讨论】:

  • 这很明显,因为 getDate() 返回一个介于 1 和 31 之间的值,表示包含或开始于此 Date 对象表示的时刻的月份中的某天,如本地解释时区。

标签: android date calendar datediff


【解决方案1】:

将日期转换为以毫秒为单位的时间戳,从另一个减去一个,然后将结果除以 86400000(一天中的毫秒数)。

long oldTime, newTime;
oldTime = dateFormat.parse(editText1.getText().toString()).getTime();
newTime = dateFormat.parse(editText2.getText().toString()).getTime();
long daysDiff = Math.abs(newTime - oldTime) / DateUtils.DAY_IN_MILLIS;

【讨论】:

  • 这通常会在夏令时的时区失败一天,其中一个日期在冬季时间,另一个日期在夏季时间。
  • 非常感谢@karakuri
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多