java中的时间比较

时间:2012-09-28 08:12:45

标签: java

我想比较字符串时间格式,例如 有没有人提供其他api?

public void test() {

    Stirng t1 = "10:30 AM"; // 12-hours format
    Stirng t2 = "11:30 AM"; // 12-hours format
            <or>
    Stirng t1 = "10:30"; // 24-hours format
    Stirng t2 = "11:30"; // 24-hours format

    if(t1.before(t2)) {
        System.out.println(t1 + " is before of " + t2);
    }
}

5 个答案:

答案 0 :(得分:6)

  

我想比较字符串时间格式

不要,除非你真的必须。

总的来说 - 随着时间的推移,这对我来说变得更加清晰,观看许多 Stack Overflow问题 - 越早将数据转换为“自然”格式就越好。在这种情况下,自然数据格式代表一天中的某个时间,不是字符串。

因此,解析所有字符串 - 最好使用Joda Time及其DateTimeFormatter.parseLocalTime方法来创建LocalTime个对象。然后它们将自然地具有可比性,并且还可用于您想要做的任何其他事情。尽可能长时间地保持数据的自然形式,只有当你完全 时才将其转换为字符串或其他表示形式,例如用于序列化到另一台机器。

当然,如果你可以避免在所有中使用字符串表示,那就更好了。

答案 1 :(得分:5)

您可以尝试使用Joda Time来解析时间并进行比较。

答案 2 :(得分:1)

我对此没有任何api知识,但你可以将你的字符串转换为日期

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
Date time =  formatter.parse("11:30");

然后只需调用方法time.compareTo(otherTime)

答案 3 :(得分:0)

尝试JodaTime

对于你的例子,它将是

if (new DateTime(2012, 9, 15, 10, 30).compareTo(new DateTime(2012, 9, 15, 11, 30) < 0) {
    // first is before second date
}

编辑:在Jon的建议之后

这样会更好

if (new LocalTime(10, 30).compareTo(new LocalTime(11, 30) < 0) {
    // first time is before second time
}

答案 4 :(得分:0)

使用Joda Time

DateTimeFormatter.parseLocalTime方法提供与本地时区对应的时间对象。

请参阅此链接:

http://joda-time.sourceforge.net/