JAVA中两个时间间隔的差异

时间:2013-05-27 08:55:57

标签: java android time

我有两次,一个开始和一个停止时间,格式为05:00 (HH:MM)。我需要两次之间的差异。如果开始时间是 05:00 并且结束时间是 15:20 ,那么如何计算两者之间的时差 10小时20分钟。我应该将它们转换为datetime对象并使用毫秒来获得时差,还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:6)

使用Joda Time。您希望LocalTime类型代表您的开始和停止时间,然后在它们之间创建Period

我不知道是否有可用于Android的Joda Time的缩减版本(如果你的应用程序很小的话,它可能会有点大)但它会比使用普通的JDK库简单得多。当然,可以这样做 - 将两者都转换为毫秒,找到差异,然后进行算术运算。这将是相对痛苦的:(

示例代码:

import org.joda.time.*;

public class Test {    
    public static void main(String args[]) {
        LocalTime start = new LocalTime(5, 0);
        LocalTime end = new LocalTime(15, 20);
        Period period = new Period(start, end, PeriodType.time());
        System.out.println(period.getHours()); // 10
        System.out.println(period.getMinutes()); // 20        
    }
}

只使用JDK类:

import java.util.*;
import java.util.concurrent.*;
import java.text.*;

public class Test {    
    public static void main(String args[]) throws ParseException {
        DateFormat format = new SimpleDateFormat("HH:mm", Locale.US);
        format.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date start = format.parse("05:00");
        Date end = format.parse("15:20");

        long difference = end.getTime() - start.getTime();

        long hours = TimeUnit.MILLISECONDS.toHours(difference);
        long minutes = TimeUnit.MILLISECONDS.toMinutes(difference) % 60;

        System.out.println("Hours: " + hours);
        System.out.println("Minutes: " + minutes);
    }
}

请注意,这假设endstart之后 - 您需要在负时间内计算出所需的结果。