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

时间:2016-06-21 19:27:29

标签: 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吗?我可以不使用时间戳并相应地检查时间戳吗?这样做的正确方法是什么?

我还在Java 7上。

4 个答案:

答案 0 :(得分:2)

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

具体来说,有AbstractInterval#containsNow()方法可以让你做你想做的事。

例如:

new Interval(start, end).containsNow();

其中start和end可以是许多不同值/对象中的任何一个。请参阅可用的不同构造函数的文档:Interval

您可以将方法修改为:

boolean isNowBetweenDateTime(final DateTime s, final DateTime e) {
    return new Interval(s, e).containsNow();
}

那就是说,它只有一行,所以你真的不需要用自己的方法包装它:)

再次,看一下文档。 Interval构造函数可以采用各种对象/值,因此请选择适合您需求的对象/值。我推荐DateTime,因为它似乎最能描述你想要做的事情。

答案 1 :(得分:0)

Joda Time 是一个非常简单的库,如果你将比较日期对象定义为 LocalDate ,那么你可以使用isBefore(),isAfter( )布尔方法:https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html#isBefore-java.time.chrono.ChronoLocalDateTime- 希望它有所帮助!

答案 2 :(得分:0)

java.time

您正在使用旧的过时类。它们已被Java 8及更高版本中内置的java.time类取代。见Oracle Tutorial。许多功能已经被后端移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

LocalTime

与旧的java.sql.Timejava.util.Date类不同,LocalTime类实际上真正代表了一个仅限时间的值。

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进行比较。我们在这里使用半开放式方法,这在日期工作中很常见,其中开头是包含,而结尾是独占

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

答案 3 :(得分:-1)

使用日期当前时间没问题。有几种方法可以解决它。

1. System.currentTimeInMillis()

2. Date today = new Date()