You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Long类型的当前时间毫秒数转换为指定格式的Date类型日期?

解决Long毫秒数转指定精度Date对象的问题

嘿,这里得先澄清一个关键点:Date类型本身是不携带任何格式信息的——它本质上就是个存储自1970年1月1日00:00:00以来毫秒数的对象。你看到的yyyy-MM-dd HH:mm这种格式,是把Date转换成String时才会有的展示形式。

所以你的需求核心应该是:把给定的Long型毫秒数,转换成一个精确到分钟级别的Date对象(也就是把秒和毫秒部分清零,对应到yyyy-MM-dd HH:mm:00.000这个时间点)。下面分两种主流场景给你实现方案:

方案一:Java 8及以上(推荐,API更简洁规范)

Java 8引入的新时间API(java.time包)处理这类需求更清晰,代码可读性更高:

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class MillisToDate {
    public static void main(String[] args) {
        // 示例:传入的Long型毫秒数(这里用当前时间演示)
        long inputMillis = System.currentTimeMillis();
        
        // 1. 将毫秒数转为Instant,再绑定到系统默认时区
        ZonedDateTime zonedDateTime = Instant.ofEpochMilli(inputMillis)
                .atZone(ZoneId.systemDefault());
        
        // 2. 截断时间到分钟级别,自动清零秒和毫秒
        ZonedDateTime minutePrecisionTime = zonedDateTime.truncatedTo(ChronoUnit.MINUTES);
        
        // 3. 转换为Date对象
        Date targetDate = Date.from(minutePrecisionTime.toInstant());
        
        // (可选)验证:将Date格式化为指定字符串查看结果
        java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
        System.out.println("对应格式的字符串:" + minutePrecisionTime.format(formatter));
        System.out.println("最终的Date对象:" + targetDate);
    }
}

代码说明:

  • truncatedTo(ChronoUnit.MINUTES)是核心操作,它会把时间的秒、毫秒部分直接清零,确保时间精确到分钟。
  • 如果需要指定时区(而非系统默认),可以把ZoneId.systemDefault()替换成ZoneId.of("Asia/Shanghai")这类具体时区ID。

方案二:Java 7及以下(兼容旧版本)

如果你的项目还在使用Java 7或更早版本,可以用Calendar类来处理:

import java.util.Calendar;
import java.util.Date;

public class OldMillisToDate {
    public static void main(String[] args) {
        long inputMillis = System.currentTimeMillis();
        
        Calendar calendar = Calendar.getInstance();
        // 将毫秒数设置到Calendar中
        calendar.setTimeInMillis(inputMillis);
        
        // 手动清零秒和毫秒,达到分钟精度
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        
        // 转换为Date对象
        Date targetDate = calendar.getTime();
        
        // (可选)验证:用SimpleDateFormat格式化查看
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm");
        System.out.println("对应格式的字符串:" + sdf.format(targetDate));
        System.out.println("最终的Date对象:" + targetDate);
    }
}

代码说明:

  • 通过手动设置SECOND和MILLISECOND为0,实现时间到分钟的截断,得到的Date对象就对应你要的精度。
  • 注意SimpleDateFormat是非线程安全的,如果在多线程环境使用,建议每次创建新实例或者用ThreadLocal封装。

内容的提问来源于stack exchange,提问作者Euphoria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:44:20