计算两个不同格式日期之间的时间差

Posted

技术标签:

【中文标题】计算两个不同格式日期之间的时间差【英文标题】:Calculating time difference between two differently formated dates 【发布时间】:2016-11-01 14:53:19 【问题描述】:

我知道关于这个问题有数百万个类似的问题,但我很难找到正确的答案,所以如果有人能给我直接的答案,我将不胜感激。

我有一些来自后端的字符串日期,格式如下:

String days = "2016-12-01T15:43:42.2737987+01:00";

我的简单日期格式化程序如下所示:

private DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.getDefault());

我正在尝试以这种方式获取今天的日期:

String currentDateandTime = sdf.format(new Date());

我计算天数差异的方法如下:

 public void daysBetween(String date1, String date2) 
    Date mDate1;
    Date mDate2;
    try 
        mDate1 = sdf.parse(date1);
        mDate2 = sdf.parse(date2);
        dateDiff = (mDate1.getTime() - mDate2.getTime()) / (24 * 60 * 60 * 1000);
        days = String.valueOf(dateDiff);
     catch (Exception e) 
        e.printStackTrace();
    

所以这里的问题是,我无法解析“天”字符串,因为有时我会得到 7 位数字,有时是 2 秒,等等...有没有办法调整这两个日期来获取天数区别?

【问题讨论】:

使用 "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'" 作为日期格式,这应该添加 7 个毫秒字段。如果这不起作用,请使用 2 个不同的格式器,一个用于 2 位,一个用于 7 位 如果你不介意导入库,joda有很好的时差函数。 有 7 个字段或任何数字的东西,我不知道我会得到多少个......我正在做的这个项目已经很大了,所以添加更多库是如果没有必要,这不是一个真正的选择:) ...有没有办法以某种方式排除秒数和这个 +01:00 ? 如果您有不同的时区,放弃最后一个 +01:00 将会中断。但是你可以使用 date.substring(0,18);还要从您的 simpleDateFormat 中删除“Z” @X3Btel 这解决了问题!!导入库更容易:) tnx! 【参考方案1】:
String formatedDays = days.substring(0,18)+ days.substring(days.lastIndexOf("+"));

这将使您的日期字符串仅包含秒数,并且其中包含时区

【讨论】:

以上是关于计算两个不同格式日期之间的时间差的主要内容,如果未能解决你的问题,请参考以下文章

如何用jquery判断两个日期之间的时间差小于一年,日期格式为20121212?

(Java / Android) 计算两个日期之间的天数并以特定格式呈现结果

SQL Server - 以 HH:MM:SS 格式计算两个日期时间戳之间的经过时间

c#如何计算两个日期之间相隔天数

sql查询计算不同列和相邻行的两个日期之间的差异

java中计算两个日期之间差的天数