如何在java/android中比较时间(在字符串中给定输入)?

rog*_*one 8 java android

我有两个用于以hh:mm格式存储时间的字符串.我想比较这两个字段以了解哪个时间更长.哪种方法最简单?

han*_*ide 22

使用SimpleDateFormat和Date类.后者实现Comparable,因此您应该能够使用.compareTo()方法进行实际比较.例:

            String pattern = "HH:mm";
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            try {
                Date date1 = sdf.parse("19:28");
                Date date2 = sdf.parse("21:13");

                // Outputs -1 as date1 is before date2
                System.out.println(date1.compareTo(date2));

                // Outputs 1 as date1 is after date1
                System.out.println(date2.compareTo(date1));

                date2 = sdf.parse("19:28");         
                // Outputs 0 as the dates are now equal
                System.out.println(date1.compareTo(date2));

            } catch (ParseException e){
                // Exception handling goes here
            }
Run Code Online (Sandbox Code Playgroud)

有关模式,请参阅SimpleDateFormat文档.


Jon*_*eet 11

好吧,如果它们实际上是 hh:mm(包括前导零和24小时格式),那么你可以按字典顺序(即使用String.compareTo(String))进行比较.这是可排序格式的好处:)

当然,这不会检查两个值是否都是有效时间.如果你需要这样做,你应该解析两次:检查长度,检查冒号,解析两个子串,并可能将小时数乘以60并将其加到分钟数,以获得总分钟数.然后你可以比较这两个总数.

编辑:正如评论中提到的,如果您确实需要解析这些值,无论出于何种原因,我个人建议使用Joda Time(可能是缩减版本,考虑到移动性质)而不是SimpleDateTimeFormat和Date.Joda Time是一个比内置API更好的日期和时间API.