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
时区敏感 务必显式设置目标时区
相关推荐
我命由我1234513 小时前
SVG - SVG 引入(SVG 概述、SVG 基本使用、SVG 使用 CSS、SVG 使用 JavaScript、SVG 实例实操)
开发语言·前端·javascript·css·学习·ecmascript·学习方法
leoufung13 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode
阿蒙Amon14 小时前
C#每日面试题-委托和事件的区别
java·开发语言·c#
宋情写14 小时前
java-IDEA
java·ide·intellij-idea
最贪吃的虎14 小时前
Git: rebase vs merge
java·运维·git·后端·mysql
用户479492835691514 小时前
给客户做私有化部署,我是如何优雅搞定 NPM 依赖管理的?
前端·后端·程序员
资生算法程序员_畅想家_剑魔14 小时前
Java常见技术分享-12-多线程安全-锁机制
java·开发语言
C_心欲无痕14 小时前
vue3 - markRaw标记为非响应式对象
前端·javascript·vue.js
一叶飘零_sweeeet14 小时前
吃透 Spring 体系结构
java·spring
qingyun98914 小时前
深度优先遍历:JavaScript递归查找树形数据结构中的节点标签
前端·javascript·数据结构