如何在java中将时间字符串与当前时间进行比较?

新手上路,请多包涵

我有一个像“15:30”这样的时间字符串,我想将该字符串与当前时间进行比较。请推荐一些简单的。以及如何以小时分钟格式获取当前时间(“HH:mm”)

原文由 mayank sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 670
2 个回答

tl;博士

LocalTime
    .now()
    .isAfter(
        LocalTime.parse( "15:30" )
    )

细节

你应该反过来想: _如何让那个字符串变成一个时间值_。您不会通过将数字转换为字符串来尝试数学。日期时间值也是如此。

避免使用旧的捆绑类,java.util.Date 和 .Calendar,因为它们出了名的麻烦,在设计和实现上都有缺陷。它们被 Java 8 中新的 java.time 包 所取代。 java.time 的灵感来自 Joda-Time

java.timeJoda-Time 都提供了一个类来捕获没有任何日期到时区的时间: LocalTime

java.time

使用 Java 内置的 java.time 类,特别是 LocalTime 。获取您当地时区的当前时间。根据您的输入字符串构建一天中的时间。与 isBeforeisAfterisEqual 方法进行比较。

 LocalTime now = LocalTime.now();
LocalTime limit = LocalTime.parse( "15:30" );
Boolean isLate = now.isAfter( limit );

最好指定您想要/期望的时区,而不是隐式依赖 JVM 当前的默认时区。

 ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
LocalTime now = LocalTime.now( z );  // Explicitly specify the desired/expected time zone.
LocalTime limit = LocalTime.parse( "15:30" );
Boolean isLate = now.isAfter( limit );

乔达时间

本例中使用 Joda-Time 库的代码恰好与上面看到的 java.time 代码几乎相同。

请注意, Joda-Time 项目现在处于 维护模式,团队建议迁移到 java.time 类。


关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

现在处于 维护模式Joda-Time 项目建议迁移到 java.time 类。

要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 中搜索许多示例和解释。规范是 JSR 310

在哪里获取 java.time 类?

ThreeTen-Extra 项目用附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 IntervalYearWeekYearQuarter 等等

原文由 Basil Bourque 发布,翻译遵循 CC BY-SA 4.0 许可协议

像这样正常比较字符串:

 String currentTime = new SimpleDateFormat("HH:mm").format(new Date());
String timeToCompare = "15:30";
boolean x = currentTime.equals(timeToCompare);

如果时间相同 x 将是 true 如果时间不同 x 将是 false

原文由 James 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题