以分钟为单位返回时间

时间:2014-03-25 20:41:22

标签: java

我试图通过以下代码在几分钟内找到差异。不提供完整的代码:

   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

4 个答案:

答案 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持续时间(期间)

或者您可能希望生成ISO 8601 Durations格式的字符串PnYnMnDTnHnMnSPeriod 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.time

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的分钟数。