【问题标题】:Time comparison in java [duplicate]java中的时间比较[重复]
【发布时间】:2012-09-28 08:12:44
【问题描述】:

我想比较一下字符串时间格式,例如 还有其他人提供的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);
    }
}

【问题讨论】:

标签: java


【解决方案1】:

我想比较一下字符串时间格式

不要,除非你真的必须这样做。

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

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

当然,如果您可以完全避免使用字符串表示,那就更好了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试JodaTime

      你的例子是

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

      编辑:根据乔恩的建议

      这样会更好

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

      【讨论】:

      • DateTime 不是在这里使用的合适类型 - 没有日期组件,我们不知道时区。我们有一个时间,在 Joda Time 中由 LocalTime 表示。
      • 啊谢谢@JonSkeet,我不知道LocalTime。
      【解决方案4】:

      我对此一无所知,但您可以将字符串转换为日期

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

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

      【讨论】:

      • SimpleDateFormat formatter = new SimpleDateFormat("HH:mm a") : 小写字母 'a' 也可以解析 AM/PM
      • 对,如果要更精确,小时可以是 HH(0-23)/hh(0-11)/KK(1-24)/kk(1-12)
      【解决方案5】:

      使用Joda Time

      DateTimeFormatter.parseLocalTime方法给出本地时区对应的时间对象。

      查看此链接:

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

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-20
        • 2019-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多