小易说IT 小易说IT

时间戳与时间格式互相转换示例代码

时间戳:一般指 Unix 时间戳,秒级:从 1970‑01‑01 00:00:00 UTC 到现在的秒数;毫秒级 乘以 1000(JS 常用)。 注意:时间戳本身是 UTC,格式化输出会受时区影响。

Java(SpringBoot / Java17)

1. 时间戳 → 日期字符串

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class TimeDemo {
    public static void main(String[] args) {
        // 秒级时间戳
        long tsSecond = 1757289600L;
        // 毫秒级时间戳
        long tsMilli = 1757289600000L;

        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy‑MM‑dd HH:mm:ss");

        // 秒戳转本地时间字符串
        LocalDateTime dt1 = LocalDateTime.ofInstant(Instant.ofEpochSecond(tsSecond), ZoneId.systemDefault());
        System.out.println(dt1.format(fmt));

        // 毫秒戳
        LocalDateTime dt2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(tsMilli), ZoneId.systemDefault());
        System.out.println(dt2.format(fmt));
    }
}

2. 日期字符串 → 时间戳

// 字符串解析为时间,再拿时间戳
String timeStr = "2025‑09‑08 12:30:00";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy‑MM‑dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(timeStr, fmt);

// 转成Instant获取时间戳
long secondTs = localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond();
long milliTs = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();

System.out.println("秒戳:" + secondTs);
System.out.println("毫秒戳:" + milliTs);

旧版SimpleDateFormat线程不安全,新项目一律用java.time

Python

import time
from datetime import datetime

# ========== 时间戳 → 时间字符串 ==========
ts_sec = 1757289600
# 本地时区格式化
dt = datetime.fromtimestamp(ts_sec)
s = dt.strftime("%Y‑%m‑%d %H:%M:%S")
print(s)

# UTC时间
dt_utc = datetime.utcfromtimestamp(ts_sec)
print(dt_utc.strftime("%Y‑%m‑%d %H:%M:%S"))

# ========== 时间字符串 → 时间戳 ==========
time_str = "2025‑09‑08 12:30:00"
dt2 = datetime.strptime(time_str, "%Y‑%m‑%d %H:%M:%S")
ts = dt2.timestamp()  # 返回浮点数秒
print(int(ts))        # 秒戳
print(int(ts*1000))   # 毫秒戳

JavaScript(前端 / NodeJS)

JS Date 构造传入毫秒时间戳

// 时间戳(毫秒) → 时间字符串
const tsMs = 1757289600000;
const d = new Date(tsMs);
console.log(d.toLocaleString()); // 本地时间
console.log(d.toISOString());    // UTC ISO格式 2025‑09‑08T00:00:00.000Z

// 时间字符串 → 毫秒时间戳
const str = "2025‑09‑08 12:30:00";
const timestampMs = new Date(str).getTime();
console.log(timestampMs);
console.log(Math.floor(timestampMs / 1000)); // 转秒戳

MySQL

-- 时间戳(秒) → 日期时间
SELECT FROM_UNIXTIME(1757289600);

-- 日期时间 → 时间戳(秒)
SELECT UNIX_TIMESTAMP('2025‑09‑08 00:00:00');

常见坑点

  1. 秒 vs 毫秒:Java/Python 默认秒;JS 只认毫秒,经常差 1000 倍,时间变成远古 / 未来。

  2. 时区:时间戳永远 UTC;格式化展示受服务器 / 操作系统时区,同一戳不同时区输出不同日期。

  3. 格式 pattern 大小写:

    • yyyyMMdd

    • HH24 小时;hh12 小时;mm分钟;ss秒。


本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。

原文链接 https://www.yijunzhao.cc/archives/timestamp-time-format-conversion-guide

欢迎访问 https://www.yijunzhao.cc/

https://www.yijunzhao.cc/