两分钟之间的差异

我需要得到两个date之间的分钟数。 我知道乔达是最好的使用,但这是一个Android项目,所以我更喜欢使用一些外部库尽可能,我正在build设的应用程序不需要计算外科精确。

但是,我使用的代码似乎并没有工作。 我试图得到“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)); } 

Solutions Collecting From Web of "两分钟之间的差异"

我通过你的代码进行debugging:在两个datestringGetItemDate()ParseException

无法parsingdate:11/21/2011 07:00:00 AM

问题是,parsingAM / PM小时只能用“hh”(小号!)或“KK”。 至less我的手机就是这种情况(我们似乎有些人根本没有看到这个问题)。 我testing它也适用于单个“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 : 无法用AM / PM标记parsingDateTime-string

PS。 我来自芬兰,所以我必须使用“Locale.US”部分来工作。 美国居民可能会在没有它的情况下testing代码,我想。

如果您的GetItemDate在任一date失败,您将得到零。 在catch语句中,放置一个println或者debug来输出这个问题,看看是否能告诉你一些东西。

另外,就实践而言,我会改变:

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

至:

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

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