LocalDateTime.now().truncatedTo(ChronoUnit.HOURS)
截断至小时。,2. 传统方式:Calendar
设置分钟、秒和毫秒为0。,3. 结果获得如2025-10-01T12:00
格式的整点时间。方法1:Java 8+ 的 LocalDateTime
(推荐)
import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { // 获取当前时间并截断到小时 LocalDateTime now = LocalDateTime.now(); LocalDateTime hourStart = now.truncatedTo(ChronoUnit.HOURS); System.out.println("当前时间: " + now); System.out.println("整点时间: " + hourStart); } }
输出示例:当前时间: 2025-10-05T14:35:42.123
整点时间: 2025-10-05T14:00
优点:
- 线程安全,无需处理时区问题(默认使用系统时区)。
- 代码简洁直观,直接使用
truncatedTo()
方法截断时间单位。
方法2:Java 8+ 的 ZonedDateTime
(需明确时区)
import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { // 指定时区(如上海) ZonedDateTime now = ZonedDateTime.now(java.time.ZoneId.of("Asia/Shanghai")); ZonedDateTime hourStart = now.truncatedTo(ChronoUnit.HOURS); System.out.println("整点时间(上海时区): " + hourStart); } }
方法3:旧版 Calendar
(Java 7及以下)
import java.util.Calendar; import java.util.Date; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 分钟、秒、毫秒归零 calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date hourStart = calendar.getTime(); System.out.println("整点时间: " + hourStart); } }
方法4:SimpleDateFormat
格式化(不推荐)
import java.text.SimpleDateFormat; import java.util.Date; public class Main { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:00:00"); String hourStartStr = sdf.format(new Date()); System.out.println("整点时间字符串: " + hourStartStr); } }
注意:
- 此方法生成的是字符串而非时间对象,后续操作需再次解析。
SimpleDateFormat
非线程安全,多线程需同步处理。
方法对比与选型建议
方法 | 适用版本 | 线程安全 | 时区处理 | 推荐度 |
---|---|---|---|---|
LocalDateTime |
Java 8+ | 系统默认 | ||
ZonedDateTime |
Java 8+ | 可指定时区 | ||
Calendar |
Java 1.1+ | 系统默认 | ||
SimpleDateFormat |
Java 1.1+ | 依赖格式化设置 |
- Java 8及以上:优先使用
LocalDateTime.truncatedTo(ChronoUnit.HOURS)
,简洁高效。 - 需指定时区:用
ZonedDateTime
替代LocalDateTime
。 - 旧版Java:用
Calendar
手动归零分钟/秒/毫秒。 - 避免使用
SimpleDateFormat
:除非仅需字符串输出。
关键点:
- 整点 = 当前小时 +
00
分00
秒000
毫秒。- 时间操作需注意时区,默认使用系统时区,跨时区应用需显式指定。
引用说明:
本文代码基于Oracle官方Java文档的日期时间API指南,遵循Java SE标准库规范。java.time
包的设计参考了JSR 310标准,是日期处理的行业最佳实践。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/25301.html