tl;博士
ZonedDateTime.now().getHour()
……或……
LocalTime.now().getHour()
ZonedDateTime
Answer by J.D. 很好,但不是最佳的。该答案使用LocalDateTime 类。缺少任何时区或与 UTC 偏移的概念,该类不能代表一个时刻。
最好使用ZonedDateTime。
ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
指定时区
如果您省略 ZoneId 参数,则会在运行时使用 JVM 的当前默认时区隐式应用一个。
所以:
ZonedDateTime.now()
…与此相同:
ZonedDateTime.now( ZoneId.systemDefault() )
最好是明确的,通过您想要/预期的时区。运行时默认可以change at any moment。
如果关键,请与用户确认时区。
小时-分钟
询问ZonedDateTime 的小时和分钟。
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
LocalTime
如果您只需要没有时区的时间,请提取 LocalTime。
LocalTime lt = zdt.toLocalTime() ;
或者完全跳过ZonedDateTime,直接转到LocalTime。
LocalTime lt = LocalTime.now( z ) ; // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
java.time 类型
关于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 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。