Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java/android中比较时间(以字符串形式给出输入)?_Java_Android - Fatal编程技术网

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

如何在java/android中比较时间(以字符串形式给出输入)?,java,android,Java,Android,我有两个字符串,用于以hh:mm格式存储时间。我想比较这两个字符串,以知道哪个时间更大。哪种方法最简单?如果它们实际上是hh:mm(包括前导零,并且是24小时格式),那么您可以按字典顺序对它们进行比较(即使用String.compareTo(String))。这就是可排序格式的好处:) 当然,这不会检查这两个值是否都是有效时间。如果需要这样做,您可能需要同时解析两次:检查长度,检查冒号,解析两个子字符串,并可能将小时数乘以60,然后将其与分钟数相加,得到总分钟数。然后你可以比较这两个总数 编辑:

我有两个字符串,用于以hh:mm格式存储时间。我想比较这两个字符串,以知道哪个时间更大。哪种方法最简单?

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

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


编辑:如评论中所述,如果出于任何原因需要解析值,我个人建议使用(可能是精简版,考虑到移动的性质)而不是
SimpleDateTimeFormat
Date
。Joda Time是一个比内置API更好的日期和时间API。

使用SimpleDataFormat和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
            }

有关模式,请参阅文档。

我以前在Android程序中编写过相关函数,我很乐意分享下面的源代码

函数(稍后将使用“如何使用”代码进行解释):

这就是我如何使用它们来计算差异(本例中为天数)。在本例中,我假设您有一个时间戳要使用,否则您可以轻松更改:

// Here you maybe have a timestamp in seconds or something..    

// This is ONE Calendar.
final String yearString = MyToolClass.setFormattedTimeString("y", timestamp);
final int year = Integer.parseInt(yearString);                                                   
final String monthString = MyToolClass.setFormattedTimeString("M", timestamp);
final int month = Integer.parseInt(monthString);                                      
final String day_in_monthString = MyToolClass.setFormattedTimeString("d",
                                        timestamp);
final int day_of_month = Integer.parseInt(day_in_monthString);

final Calendar calendarOne = MyToolClass.setCalendar(year, month,
                                        day_of_month);   

// Same stuff for Calendar two.

// Calculate difference in days.
final double differenceInDays = MyToolClass.timeDifferenceInDays(calendarOne,
                                        calendarTwo); 

回答得很好。简单的字符串比较就是我想要的。顺便说一句,如果我们使用适当的格式,比如(yyyy-mm-dd),我想我们可以用同样的方式比较日期。不是吗?谢谢你的帮助answer@rogerstone:我已经添加了我的答案,它向您展示了如何比较日期。@rogerstone:是的,如果您以yyyy-MM-dd格式存储日期,并且以yyyy-MM-dd HH:MM:ss格式存储日期/时间,您总是可以按字典顺序排序。我真的认为您应该使用SimpleDateFormat和date。比较字符串必然会导致混乱,例如,由于没有错误处理,您最终使用了无效值。@hpe:这取决于其他地方是否已经进行了验证。如果您可以信任这些值,但出于任何原因,它们仍然是字符串(这肯定会发生),那么就不需要重新分析它们。如果你真的需要解析它们,我会使用Joda Time而不是SimpleDateFormat:)谢谢你的回答。这对美沙克的维克托将来会很有用。虽然这不是最简单的方法,但我会记住这一点。
// Here you maybe have a timestamp in seconds or something..    

// This is ONE Calendar.
final String yearString = MyToolClass.setFormattedTimeString("y", timestamp);
final int year = Integer.parseInt(yearString);                                                   
final String monthString = MyToolClass.setFormattedTimeString("M", timestamp);
final int month = Integer.parseInt(monthString);                                      
final String day_in_monthString = MyToolClass.setFormattedTimeString("d",
                                        timestamp);
final int day_of_month = Integer.parseInt(day_in_monthString);

final Calendar calendarOne = MyToolClass.setCalendar(year, month,
                                        day_of_month);   

// Same stuff for Calendar two.

// Calculate difference in days.
final double differenceInDays = MyToolClass.timeDifferenceInDays(calendarOne,
                                        calendarTwo);