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

may*_*rma 4 java comparison datetime

我有一个像"15:30"的时间字符串我想将该字符串与当前时间进行比较.请提出一些简单的建议 以及如何以小时分钟格式获取当前时间("HH:mm")

Bas*_*que 9

TL;博士

LocalTime.now()
         .isAfter( LocalTime.parse( "15:30" ) )
Run Code Online (Sandbox Code Playgroud)

细节

您应该反过来考虑:如何将该字符串转换为时间值.您不会通过将数字转换为字符串来尝试数学.日期时间值也是如此.

避免使用旧的捆绑类java.util.Date和.Calendar,因为它们在设计和实现方面都非常麻烦,存在缺陷.他们被新取代java.time包的Java 8.而java.time的灵感来自于Joda-Time.

无论java.time乔达时间提供了一个类来捕获时间的天,没有任何日期的时区:LocalTime.

java.time

具体来说,使用Java内置的java.time类LocalTime.获取当地时区的当前时间.根据输入字符串构造一个时间.与比较isBefore,isAfterisEqual方法.

LocalTime now = LocalTime.now();
LocalTime limit = LocalTime.parse( "15:30" );
Boolean isLate = now.isAfter( limit );
Run Code Online (Sandbox Code Playgroud)

最好指定所需/预期的时区,而不是隐式依赖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 );
Run Code Online (Sandbox Code Playgroud)

乔达时间

在这种情况下,使用Joda-Time库的代码几乎与上面针对java.time看到的代码相同.

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


关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

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

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

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.


Jam*_*mes 6

只需比较正常的字符串,如下所示:

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

如果时间是相同的x,true如果它们不是x将是false