两个日期之间的差异(以分钟为单位)

Posted

技术标签:

【中文标题】两个日期之间的差异(以分钟为单位)【英文标题】:Difference, in minutes, between two dates 【发布时间】:2012-01-03 05:11:37 【问题描述】:

我需要获取两个日期之间的分钟数。我知道 Joda 是最好用的,但这是针对 android 项目的,所以我更喜欢尽可能使用一些外部库,而且我正在构建的应用程序不需要精确的计算。

但是,我使用的代码似乎不起作用。我正在尝试获取“11/21/2011 7:00:00 AM”和“11/21/2011 1:00:00 PM”之间的分钟数(应该是 360 分钟),但代码 I '正在使用返回 0:

int diff = minutesDiff(GetItemDate("11/21/2011 7:00:00 AM"), GetItemDate("11/21/2011 1:00:00 PM"));

public static Date GetItemDate(final String date)

    final Calendar cal = Calendar.getInstance(TimeZone.getDefault());
    final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
    format.setCalendar(cal);

    try 
        return format.parse(date);
     catch (ParseException e) 
        return null;
    


public static int minutesDiff(Date earlierDate, Date laterDate)

    if( earlierDate == null || laterDate == null ) return 0;

    return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));

【问题讨论】:

有吗?它不适合我。还有,你为什么要分两次? 它对我来说非常好用。输出为 -360。 我不知道你为什么得到零,但你的格式字符串是错误的。 HH 是 0 到 23 之间小时的格式,但由于您也有格式字符,我假设您希望小时在 1 到 12 之间,并且您应该使用 hh。目前,您的 1:00:00 PM 被解析为 1:00:00 AM。 如果一个日期是null,作为返回值,-1 会不会更有意义?还是抛出IllegalArgumentException?如果你返回0,这两个日期似乎代表了同一个时间点,但其中一个甚至可能不是有效的对象引用。 感谢亚诺,这就是问题所在。我在格式化日期时遇到了异常。此外,删除了两个部门。 :) 【参考方案1】:

如果您的 GetItemDate 在任一日期失败,您将获得零。在 catch 语句中,放置一个 println 或 debug 来输出问题,看看它是否能告诉你什么。

另外,作为一个实践问题,我会改变:

return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));

到:

long result = ((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
return (int) result;

这使您有机会在 IDE 中查看数学结果。

【讨论】:

许多(大多数?)IDE 都具有观察函数返回值的能力,因此没有必要为此创建一个本地 just。我仍然不会做两次除法。 很好的呼吁不做分裂两次。我什至没有注意到。 您可能最好舍入然后转换为int,但这当然取决于您的意图。 2 分 59 秒和 4 分 0 秒比 2 更接近 1 分钟差 59 秒。 阅读 cmets 后:return Math.round((laterDate.getTime() - earlierDate.getTime())/60000); 注意:不需要转换为 intMath.round 返回int【参考方案2】:

我通过您的代码进行了调试:GetItemDate() 中的 ParseException 用于两个日期字符串,例如:

无法解析的日期:11/21/2011 07:00:00 AM

问题在于解析上午/下午时间仅适用于“hh”(小型大写字母!)或“KK”。至少我的手机就是这种情况(似乎我们中的一些人根本没有看到这个问题)。我测试过它也适用于单个“h”。

hh = 1-12 KK = 0-11 HH = 0-23 kk = 1-24

将您的 SimpleDateFormat 行更改为:

final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US);

这篇文章解释了“a”和Locale:Unable to parse DateTime-string with AM/PM marker

PS。我来自芬兰,所以我必须使用“Locale.US”部分才能正常工作。我认为,美国居民可以在没有它的情况下测试代码。

【讨论】:

以上是关于两个日期之间的差异(以分钟为单位)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Date-FNS - NaN 错误以分钟为单位获取日期之间的差异

两个日期时间之间的差异(以毫秒为单位)(Informix)

如何计算两个日期之间的差异

计算两个日期时间odoo 10之间的差异[重复]

Python中以分钟为单位的日期差异

以小时和分钟计算两个日期之间的差异