【问题标题】:Difference between two time intervals in JAVA [duplicate]JAVA中两个时间间隔之间的差异[重复]
【发布时间】:2013-05-27 08:55:57
【问题描述】:

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

【问题讨论】:

    标签: java android time


    【解决方案1】:

    使用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 之后 - 您需要计算出负时间的预期结果。

    【讨论】:

    • Joda 时间会不会为此而死?
    • @user818455:这取决于您对代码简单性的重视程度。使用 Joda Time 可以节省时间,但这显然是一个额外的依赖项。您是否在您的应用程序中执行其他日期/时间工作?您所做的日期/时间工作越多,使用 Joda Time 就越有意义。
    • @user818455:查看我对基于 JDK 版本的编辑。
    • 现在我肯定会去 Joda 时间,因为我有更多的工作要处理日期/时间。谢谢@Jon
    • 天啊简直太棒了。再次感谢@jon
    猜你喜欢
    • 2015-03-22
    • 2012-12-22
    • 2014-10-23
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2019-09-15
    相关资源
    最近更新 更多