Java解析前端传来的Unix时间戳

在Java中,前端传递的 1749571200000 是一个 Unix时间戳(毫秒级) ,表示自1970年1月1日00:00:00 UTC以来经过的毫秒数。以下是两种常见的解析方式(推荐使用Java 8的java.time API):


方法1:使用 Java 8 的 java.time API(推荐)

java

复制

下载

复制代码
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class TimestampParser {
    public static void main(String[] args) {
        long timestamp = 1749571200000L; // 前端传来的时间戳
        
        // Step 1: 转换为 Instant (UTC时间)
        Instant instant = Instant.ofEpochMilli(timestamp);
        
        // Step 2: 转换为本地时间(根据系统时区)
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Step 3: 格式化输出(可选)
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDate = localDateTime.format(formatter);
        
        System.out.println("解析结果: " + formattedDate); // 输出: 2025-06-09 08:00:00
    }
}
关键点:
  • Instant.ofEpochMilli() 将毫秒时间戳转为 Instant(UTC标准时间)。

  • LocalDateTime.ofInstant() 结合时区(如 ZoneId.systemDefault())转换为本地时间。

  • 使用 DateTimeFormatter 自定义日期格式。


方法2:使用旧版 java.util.Date(兼容旧项目)

java

复制

下载

复制代码
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class LegacyTimestampParser {
    public static void main(String[] args) {
        long timestamp = 1749571200000L; // 前端传来的时间戳
        
        // Step 1: 创建Date对象
        Date date = new Date(timestamp);
        
        // Step 2: 设置日期格式化器(指定时区)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 按需修改时区
        
        // Step 3: 格式化输出
        String formattedDate = sdf.format(date);
        
        System.out.println("解析结果: " + formattedDate); // 输出: 2025-06-09 08:00:00
    }
}

时区说明

  • 前端时间戳 通常是UTC时间,解析时需要明确目标时区:

    • 如果前端传递的是UTC时间,解析时建议先转UTC再按需调整时区。

    • 示例中 Asia/Shanghai(UTC+8)会导致时间+8小时。

  • 关键时区设置:

    • Java 8: ZoneId.of("UTC")ZoneId.systemDefault()

    • 旧版API: sdf.setTimeZone(TimeZone.getTimeZone("UTC"))


验证时间戳

  • 工具验证:https://www.epochconverter.com/

  • 1749571200000 对应 UTC时间 2025-06-09 00:00:00

    转换为北京时间(UTC+8)则是 2025-06-09 08:00:00


总结

场景 方案
Java 8+ 项目 优先使用 Instant + LocalDateTime
兼容旧系统 (Java 7-) 使用 Date + SimpleDateFormat
时区敏感 务必显式设置目标时区
相关推荐
是未才8 分钟前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio36 分钟前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
DevUI团队1 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
萧瑟余晖2 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
weixin_431600442 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
kyriewen2 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程
IT_陈寒3 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635073 小时前
Type vs Interface:读完这篇就没有面试官能难倒你了
前端·面试·typescript
油丶酸萝卜别吃4 小时前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang4 小时前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试