Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个日期之间的差异(以分钟为单位)_Java_Android_Datetime - Fatal编程技术网

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

Java 两个日期之间的差异(以分钟为单位),java,android,datetime,Java,Android,Datetime,我需要得到两次约会之间的分钟数。我知道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"), GetItemD

我需要得到两次约会之间的分钟数。我知道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));
}

如果您的GetItemDate在任何一个日期都失败,您将得到零。在catch语句上,放置一个println或debug来输出问题,看看这是否告诉您一些事情

另外,作为实践,我会改变:

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


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

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

无法解析日期:2011年11月21日07:00:00 AM

问题在于,解析AM/PM小时仅适用于“hh”(小写!)或“KK”。至少在我的手机里是这样(似乎我们中的一些人根本没有看到这个问题)。我测试了它也可以和一个“h”一起工作

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

simpleDataFormat
行更改为:

final SimpleDateFormat=new SimpleDateFormat(“MM/dd/yyyy hh:MM:ss a”,Locale.US);

这篇文章解释了“a”和
语言环境


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

它会吗?这不适合我。还有,你为什么要做两次除法?对我来说很好。输出是-360。我不知道为什么会得到零,但是你的格式字符串是错误的。HH是0到23之间小时的格式,但由于您也有a格式字符,我假设您希望小时在1到12之间,您应该使用HH。当前,您的1:00:00 PM被解析为1:00:00 AM。如果一个日期为
null
,作为返回值是否更有意义?或者抛出一个
非法argumentException
?如果返回
0
,这两个日期似乎代表相同的时间点,但其中一个可能不是有效的对象引用。谢谢Jarno,这就是问题所在。我在格式化日期时遇到了一个异常。此外,删除了两个分区。:)许多(大多数?)IDE都具有监视函数返回值的能力,因此不必为此目的创建一个本地IDE。我还是不想做两次除法。这是一个很好的建议,不要做两次除法。我甚至都没注意到。你可能会更擅长四舍五入,然后将其转换为
int
,但这当然取决于你的意图。2分59秒和4分0秒比2分差59秒接近1分钟。阅读注释后:
返回Math.round((laterDate.getTime()-earlierDate.getTime())/60000)注意:不需要强制转换为
int
Math.round
返回
int
long result = ((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
return (int) result;