我试图通过以下代码在几分钟内找到差异。不提供完整的代码:
String dateStart = "03/25/2014 18:03:00";
String dateStop = "03/25/2014 19:45:00";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
long diff = endDate.getTime()-startDate.getTime();
long minutes = diff/(60*1000) % 60;
不确定为什么它会在14分钟后返回。而是102分钟。
此致 chaitu
答案 0 :(得分:1)
在Joda-Time中,使用Minutes类。基本上是一行代码,调用minutesBetween
。
以下是Joda-Time 2.3中的一些示例代码。
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm:ss" ).withZone( timeZone );
DateTime start = formatter.parseDateTime( "03/25/2014 18:03:00" );
DateTime stop = formatter.parseDateTime( "03/25/2014 19:45:00" );
int minutes = Minutes.minutesBetween( start, stop ).getMinutes();
或者您可能希望生成ISO 8601 Durations格式的字符串PnYnMnDTnHnMnS
:Period period = new Period( start, stop );
String output = period.toString();
。要在Joda-Time中这样做,请使用Period类(是的,日期时间术语不是标准化的,不同的人使用不同的方法)。
System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
System.out.println( "minutes: " + minutes );
System.out.println( "period: " + period );
转储到控制台...
start: 2014-03-25T18:03:00.000+01:00
stop: 2014-03-25T19:45:00.000+01:00
minutes: 102
period: PT1H42M
跑步时......
PT1H42M
{{1}}的输出意味着"一小时四十二分钟"。
您的问题和代码在解析这些字符串时忽略了时区的关键问题。你应该几乎总是指定一个时区。
Java 8中的新java.time包可能具有与您在Joda-Time中看到的类似的功能。
答案 1 :(得分:0)
要获得分钟的差异,您可以使用:
long minutes = diff / (60 * 1000);
当你这样做时:
long minutes = diff / (60 * 1000) % 60;
您在日期之间获得分钟的差异。换句话说,你只考虑分钟;不是几小时,也不是几天......
答案 2 :(得分:0)
long diff = endDate.getTime()-startDate.getTime();
使diff成为两次之间的差异,以毫秒为单位(6120000)。得到秒,除以1000(6120)。要获得分钟数,请将结果除以60(102)。
为了得到完全废话,进一步采取mod 60(给出42)。
(请注意,这是一个数学错误,而不是关于Java的问题。)
答案 3 :(得分:0)
不需要代码中的模数运算。请记住,模数运算符为您提供操作的其余部分。如果你拿出“%60;”代码的一部分,它应该可以工作。
固定计算:
long minutes = diff/(60*1000);
您希望使用模数运算符的情况是,您还希望以大于一分钟的单位表示差异,例如小时或天。在这种情况下,您将使用模数运算符来确保您只提取小于60的分钟数。