tl;博士
LocalTime.now() // Capture current moment. Better to explicitly pass a `ZoneId` object than rely implicitly on the JVM’s current default time zone.
.isBefore( LocalTime.of( 18 , 0 ) ) // Compare the current time-of-day against the limit.
无需毫秒计数
无需计算毫秒数。 Java 为这项工作提供了智能日期时间类,可以在 Java 8 及更高版本中内置的 java.time 包中找到。对于早期的 Android,请参阅下面的最后一个项目符号。
不需要System.currentTimeMillis()。 java.time 类做同样的工作。
LocalTime
要获取当前时间,不带日期和时区,请使用LocalTime。
确定当前时间需要时区。对于任何给定的时刻,一天中的时间因区域而异。如果省略,则隐式应用 JVM 的当前默认时区。最好明确指定您想要/预期的时区,因为默认值可能会在运行前或运行时随时更改。
以continent/region 的格式指定proper time zone name,例如America/Montreal、Africa/Casablanca 或Pacific/Auckland。切勿使用 3-4 个字母的缩写,例如 EST 或 IST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalTime now = LocalTime.now( z ) ;
与方法isBefore、isAfter 和equals 进行比较。
询问“等于或晚于中午”的更简短的方式是“不早于中午”。
boolean isAfternoon =
( ! now.isBefore( LocalTime.NOON ) )
&&
now.isBefore( LocalTime.of( 18 , 0 ) )
;
如果您担心Daylight Saving Time( DST) 等异常的影响,请探索使用ZonedDateTime 而不是仅仅使用LocalTime。
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?