Java如何获取整点时间方法
- 后端开发
- 2025-06-15
- 8
方法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标准,是日期处理的行业最佳实践。
