我需要检查当前时间是否在上午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上。
答案 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 8及更高版本中内置的java.time类取代。见Oracle Tutorial。许多功能已经被后端移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
LocalTime
与旧的java.sql.Time
和java.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()