Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中比较sysdate时间和字符串时间_Java_Methods_Time_Simpledateformat_Sysdate - Fatal编程技术网

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

如何在Java中比较sysdate时间和字符串时间,java,methods,time,simpledateformat,sysdate,Java,Methods,Time,Simpledateformat,Sysdate,我想做的是: 如果时间为10:00:00,将执行过程 如果时间为11:00:00,将执行proc.process1 为什么不直接使用Java8DateAPI呢 比如: LocalTime firstTime = LocalTime.of(11, 0, 0); LocalTime secondTime = LocalTime.of(12, 0, 0); LocalTime now = LocalTime.now(); if (now.isAfter(startTime) &

我想做的是:

  • 如果时间为10:00:00,将执行过程
  • 如果时间为11:00:00,将执行proc.process1


为什么不直接使用Java8DateAPI呢

比如:

 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;博士 细节 这是一个很好的尝试,但有多个缺陷

现在调用
两次
是一种错误的做法,因为您最终会在两个不同的时刻进行无效的比较。调用一次,并分配给变量

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

您可以询问设备的当前默认时区。但如果至关重要,您应该询问/确认用户

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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)


该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。

为什么不使用java 8方式?首先要了解的是:==告诉您两个引用是否指向同一个对象。解析两个字符串时,会得到两个日期对象;所以你的支票总是假的。您必须改用equals()。严肃地说:如果你在这些超级基础上失败了,那么你应该后退一步,忘记你现在想要做的事情。因为那时你几乎什么都不知道;你最好花几个星期来学习这些基础知识。否则,你将从一个令人沮丧的时刻跑到下一个令人沮丧的时刻。你有什么建议吗?我需要什么基础知识来学习GhostCatOCA Java Book study被纠正了,我无法检查,因为我目前的计算机上没有Java 8,用于半开放的方法,其中开始是包含的,而结束是独占的,这种比较是:
(!now.isBefore(startTime))&&now.isBefore(endTime)
LocalTime start = LocalTime.parse( "11:00:00" );
LocalTime stop = LocalTime.parse( "12:00:00" );
Boolean isNowWithinRange = ( ( ! now.isBefore( start ) ) && now.isBefore( stop ) ) ;