如何在 Java 中比较 sysdate 时间和字符串时间

How to Compare sysdate time and String time in Java

我想做的是:


String TimeVal = "11:00:00";
String TimeVal1 = "12:00:00";

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
Date date1 = sdf.parse(TimeVal);
Date date2 = sdf2.parse(TimeVal1);

if (date1 == date) {
    proc.process(variable);    
}
if (date1 == date) {
    proc.process1(variable);     

    proc.process2(variable);
    proc.process3(variable);
    proc.process4(variable);
    proc.process5(variable);
    proc.process6(variable);
    proc.process7(variable);
    proc.process8(variable);
    proc.process9(variable);
    proc.process10(variable);
    proc.process11(variable);

为什么不简单地使用 java 8 日期 api?

喜欢:

 LocalTime firstTime = LocalTime.of(11, 0, 0); 
 LocalTime secondTime = LocalTime.of(12, 0, 0);
 LocalTime now = LocalTime.now();

 if (now.isAfter(startTime) &&
     now.isBefore(endTime)){
     //process
 }

如果你想坚持你的 Date() 对象,你可以比较毫秒:

if(date1.getTime() == date.getTime()) { 
// ...
}

tl;博士

LocalTime now = LocalTime.now( ZoneId.of( "America/Montreal" ) );
Boolean isNowWithinRange =
    ( 
        ( ! now.isBefore( LocalTime.parse( "11:00:00" ) ) ) 
        && now.isBefore( LocalTime.parse( "12:00:00" ) 
    ) ;

详情

是一个很好的尝试,但有很多缺陷。

调用 now 两次的错误做法,因为您最终会对两个不同时刻进行无效比较。调用一次,赋值给一个变量。

不要忽视时区这个关键问题。最好显式地将可选时区参数传递给 now( ZoneId ),而不是隐式依赖 JVM 的当前默认值,后者随时可能更改。

您可以询问设备当前的默认时区。但如果重要,你应该ask/confirm与用户。

ZoneId z = ZoneId.of( "America/Montreal" ); 
LocalTime now = LocalTime.now( z );

您可以将输入字符串直接解析为 LocalTime 个对象。

LocalTime start = LocalTime.parse( "11:00:00" );
LocalTime stop = LocalTime.parse( "12:00:00" );

日期时间工作中的常见做法是对时间跨度使用半开方法。开头包含,结尾不包含。始终如一地使用这种方法可以使您的代码更易于理解并且更不容易出错。

提示:说“不在开始之前”是说“等于或晚于开始”的更简短的说法。

Boolean isNowWithinRange = ( ( ! now.isBefore( start ) ) && now.isBefore( stop ) ) ;

关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat.

Joda-Time project, now in maintenance mode,建议迁移到java.time。

要了解更多信息,请参阅 Oracle Tutorial。并在 Stack Overflow 中搜索许多示例和解释。

许多 java.time 功能被反向移植到 ThreeTen-Backport and further adapted to Android in ThreeTenABP (see 中的 Java 6 & 7)。

ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.