上一篇                     
               
			  Java如何获取整点时间方法
- 后端开发
- 2025-06-15
- 3841
 使用Java获取时间整点,可通过以下方法:,1. Java 8及以上:用
 
 
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标准,是日期处理的行业最佳实践。

 
  
			 
			 
			