tl;博士
LocalTime lt = LocalTime.now( ZoneId.of( "America/Montreal" ) ) ;
if
(
( ! lt.isBefore( LocalTime.of( 13 , 0 ) ) // If 1 PM or later ( in other words, if not before 1 PM )
&& // …and…
lt.isBefore( LocalTime.of( 17 , 0 ) // if not yet 5 PM
)
{
… proceed
}
else
{
… reject user
}
半开
Answer by WJS 很接近,明智地利用了现代的 java.time 类。但是,在日期时间工作中,通常最好使用半开方法定义时间跨度。在这种方法中,开头是inclusive,而结尾是exclusive。
因此,下午 1 点到下午 5 点的范围从 13:00 开始,一直持续到但不包括 17:00。
LocalTime start = LocalTime.of( 13 , 0 ) ;
LocalTime stop = LocalTime.of( 17 , 0 ) ;
捕捉当前时间。
ZoneId z = ZoneId.systemDefault() ; // Or specify a zone such as `Africa/Tunis` or `Asia/Tokyo`.
LocalTime now = LocalTime.now( z ) ;
比较开始和停止范围。我们使用LocalTime 上的equals、isBefore 和isAfter 方法进行比较。
提示:询问“等于或晚于”的简短方法是“不早于”。
boolean nowInEffect = ( ! now.isBefore( start ) ) && ( now.isBefore( stop ) ) ;
然后执行您的用户界面操作。
if ( nowInEffect ) {
… proceed
} else {
… tell user to check back later
}
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?