Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 如何检查时间是否在特定范围之间?_Java_Date_Timestamp - Fatal编程技术网

Java 如何检查时间是否在特定范围之间?

Java 如何检查时间是否在特定范围之间?,java,date,timestamp,Java,Date,Timestamp,我需要检查当前时间是否在上午8点到下午3点之间。如果它在这些时间范围之间,那么我需要返回yes,否则返回false boolean isNowBetweenDateTime(final Date s, final Date e) { final Date now = new Date(); return now.after(s) && now.before(e); } 但是我不确定我应该在这里使用Date?我可以不使用时间戳并相应地检查时间戳吗?正确的方法是什么

我需要检查当前时间是否在上午8点到下午3点之间。如果它在这些时间范围之间,那么我需要返回yes,否则返回false

boolean isNowBetweenDateTime(final Date s, final Date e) {
    final Date now = new Date();
    return now.after(s) && now.before(e);
}
但是我不确定我应该在这里使用
Date
?我可以不使用时间戳并相应地检查时间戳吗?正确的方法是什么


我仍在使用Java 7。

如果您使用的是Java 8之前的Java版本,请查看Java的API文档

具体来说,有一种方法可以让你做你想做的事

例如:

new Interval(start, end).containsNow();
其中开始和结束可以是多个不同的值/对象中的任意一个。请参阅不同可用构造函数的文档:


您可以修改您的方法,如下所示:

boolean isNowBetweenDateTime(final DateTime s, final DateTime e) {
    return new Interval(s, e).containsNow();
}
也就是说,它只有一行,所以您真的不需要用自己的方法来包装它:)


再次查看文档。区间构造函数可以接受各种对象/值,因此选择适合您需要的对象/值。我推荐DateTime,因为它似乎最能描述您想要做的事情。

使用Date作为当前时间是可以的。有几种方法可以解决这个问题

1. System.currentTimeInMillis()

2. Date today = new Date()

Joda Time是一个非常简单的库,如果将比较日期对象定义为LocalDate,则可以使用isBefore()、isAfter()布尔方法: 希望有帮助

java.time 您正在使用过时的旧类。它们已经被内置在Java8和更高版本中的类所取代。看见许多功能已在中向后移植到Java6和Java7,并在中进一步适应Android

LocalTime
与旧的
java.sql.time
java.util.Date
类不同,该类实际上只表示一天中的一个时间值

LocalTime start = LocalTime.of( 8 , 0 );
LocalTime stop = LocalTime.of( 15 , 0 );
时区 确定当前时间需要时区。对于任何给定的时刻,全球各地的时间因时区而异

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );
比较 通过调用
equals
、isAfter或isBefore进行比较。我们在这里使用半开放的方法,这在日期时间工作中很常见,其中开始是包含的,而结束是独占的


套用开始喝酒的借口,“世界上某个地方总是在上午8点到下午3点之间”。首先,您需要指定一个时区来计算本地时间。我不知道是否有一种“正确”的方法可以做到这一点。java.util.Date可以正常工作,但您可能需要研究java.time.ZonedDateTime,这将有助于解决时区问题@AndyTurnerout@AndyTurner时区将是PDT@user1950349一年四季?或者你是指美国/洛杉矶?不管您的回复如何,都要知道Date没有时区信息,因此您可能不会总是得到预期的结果。Java 8发布两年后,第一个调用端口应该是Java 8 time API。@Andy Turner我们中的一些人仍然需要使用旧版本的Java:),但公平点是,我已经编辑了我的答案。我仍然使用Java7。对不起,我忘了在问题中提及。你能提供一个java 7的例子吗?@user1950349用一个更完整的例子编辑。@avojak ohh我现在明白了。我以为Interval是Java8,所以我这么说。。您还可以告诉我如何在这里将
s
初始化为上午8点和
e
初始化为下午3点。我从来没有用过乔达这么困惑。这并不能回答OP的问题。他不需要打印日期。
 Boolean isNowInRange = ( ! now.isBefore( start ) ) && now.isBefore( stop ) ;