【发布时间】:2013-05-27 08:55:57
【问题描述】:
我有两个时间,一个开始时间和一个停止时间,格式为05:00 (HH:MM)。我需要两个时间之间的差异。假设如果开始时间是05:00,结束时间是15:20,那么我如何计算两者之间的时间差将是 10 小时 20 分钟。我应该将它们转换为datetime 对象并使用毫秒来获取时间差还是有更好的方法来做到这一点?
【问题讨论】:
我有两个时间,一个开始时间和一个停止时间,格式为05:00 (HH:MM)。我需要两个时间之间的差异。假设如果开始时间是05:00,结束时间是15:20,那么我如何计算两者之间的时间差将是 10 小时 20 分钟。我应该将它们转换为datetime 对象并使用毫秒来获取时间差还是有更好的方法来做到这一点?
【问题讨论】:
使用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);
}
}
请注意,这假设 end 在 start 之后 - 您需要计算出负时间的预期结果。
【讨论】: