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

Kri*_*s B 18 java datetime android

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

但是,我使用的代码似乎不起作用.我想要获得"11/21/2011 7:00:00 AM"和"11/21/2011 1:00:00 PM"之间的分钟数(应该是360分钟),但是代码我使用返回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));
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*hom 15

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

另外,作为一种惯例,我会改变:

return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
Run Code Online (Sandbox Code Playgroud)

至:

long result = ((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
return (int) result;
Run Code Online (Sandbox Code Playgroud)

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

  • 许多(大多数?)IDE能够监视函数返回值,因此不需要为此目的创建本地***.我仍然不会两次做分裂. (4认同)

Jar*_*der 5

我从你的代码调试:有ParseExceptionGetItemDate()两个日期字符串类似的:

Unparseable date:11/21/2011 07:00:00 AM

问题是解析AM/PM小时仅适用于"hh"(小型大写!)或"KK".至少在我的手机中就是这种情况(似乎我们中的一些人根本没有看到这个问题).我测试它也适用于单个"h".

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

将您的SimpleDateFormat行更改为:

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


这篇文章解释了"a"和Locale:无法使用AM/PM标记解析DateTime-string

PS.我来自芬兰所以我必须使用"Locale.US"部分来实现这个目的.我想,美国居民可能会在没有它的情况下测试代码.