TimeCraft

代码示例

各编程语言时间戳代码示例

获取、转换、格式化Unix时间戳的常用代码片段

🟨JavaScript

获取当前时间戳(毫秒)
// 获取当前时间戳(毫秒级)
const timestampMs = Date.now();
console.log(timestampMs); // 1735660800000
获取当前时间戳(秒)
// 获取当前时间戳(秒级)
const timestampSec = Math.floor(Date.now() / 1000);
console.log(timestampSec); // 1735660800
时间戳转日期
// 时间戳转日期对象
const timestamp = 1735660800;
const date = new Date(timestamp * 1000);
console.log(date.toLocaleString('zh-CN')); // 2025/1/1 00:00:00
日期转时间戳
// 日期转时间戳
const date = new Date('2025-01-01 00:00:00');
const timestamp = Math.floor(date.getTime() / 1000);
console.log(timestamp); // 1735660800

🐍Python

获取当前时间戳
import time

# 获取当前时间戳(秒级)
timestamp = int(time.time())
print(timestamp)  # 1735660800

# 获取当前时间戳(毫秒级)
timestamp_ms = int(time.time() * 1000)
print(timestamp_ms)  # 1735660800000
时间戳转日期
from datetime import datetime

# 时间戳转日期
timestamp = 1735660800
date = datetime.fromtimestamp(timestamp)
print(date.strftime('%Y-%m-%d %H:%M:%S'))  # 2025-01-01 00:00:00

# UTC时间
date_utc = datetime.utcfromtimestamp(timestamp)
print(date_utc.strftime('%Y-%m-%d %H:%M:%S'))  # 2024-12-31 16:00:00
日期转时间戳
from datetime import datetime

# 日期转时间戳
date = datetime(2025, 1, 1, 0, 0, 0)
timestamp = int(date.timestamp())
print(timestamp)  # 1735660800

Java

获取当前时间戳
// 获取当前时间戳(毫秒级)
long timestampMs = System.currentTimeMillis();
System.out.println(timestampMs);  // 1735660800000L

// 获取当前时间戳(秒级)
long timestampSec = System.currentTimeMillis() / 1000;
System.out.println(timestampSec);  // 1735660800
时间戳转日期 (Java 8+)
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

// 时间戳转日期
long timestamp = 1735660800L;
LocalDateTime date = LocalDateTime.ofInstant(
    Instant.ofEpochSecond(timestamp), 
    ZoneId.systemDefault()
);
System.out.println(date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// 2025-01-01 00:00:00
日期转时间戳 (Java 8+)
import java.time.LocalDateTime;
import java.time.ZoneId;

// 日期转时间戳
LocalDateTime date = LocalDateTime.of(2025, 1, 1, 0, 0, 0);
long timestamp = date.atZone(ZoneId.systemDefault()).toEpochSecond();
System.out.println(timestamp);  // 1735660800

🐘PHP

获取当前时间戳
<?php
// 获取当前时间戳(秒级)
$timestamp = time();
echo $timestamp;  // 1735660800

// 获取当前时间戳(毫秒级)
$timestampMs = intval(microtime(true) * 1000);
echo $timestampMs;  // 1735660800000
?>
时间戳转日期
<?php
// 时间戳转日期
$timestamp = 1735660800;
$date = date('Y-m-d H:i:s', $timestamp);
echo $date;  // 2025-01-01 00:00:00
?>
日期转时间戳
<?php
// 日期转时间戳
$timestamp = strtotime('2025-01-01 00:00:00');
echo $timestamp;  // 1735660800

// 指定格式解析
$timestamp = DateTime::createFromFormat('Y-m-d H:i:s', '2025-01-01 00:00:00')->getTimestamp();
?>

🔵Go

获取当前时间戳
package main

import (
    "fmt"
    "time"
)

func main() {
    // 获取当前时间戳(秒级)
    timestamp := time.Now().Unix()
    fmt.Println(timestamp)  // 1735660800

    // 获取当前时间戳(毫秒级)
    timestampMs := time.Now().UnixMilli()
    fmt.Println(timestampMs)  // 1735660800000
}
时间戳转日期
package main

import (
    "fmt"
    "time"
)

func main() {
    // 时间戳转日期
    timestamp := int64(1735660800)
    date := time.Unix(timestamp, 0)
    fmt.Println(date.Format("2006-01-02 15:04:05"))  // 2025-01-01 00:00:00
}
日期转时间戳
package main

import (
    "fmt"
    "time"
)

func main() {
    // 日期转时间戳
    date, _ := time.Parse("2006-01-02 15:04:05", "2025-01-01 00:00:00")
    timestamp := date.Unix()
    fmt.Println(timestamp)  // 1735660800
}

🗄️MySQL

获取当前时间戳
-- 获取当前Unix时间戳(秒级)
SELECT UNIX_TIMESTAMP();
-- 结果: 1735660800

-- 获取当前时间戳(毫秒级,MySQL 5.6.4+)
SELECT ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000);
-- 结果: 1735660800000
时间戳转日期
-- 时间戳转日期时间
SELECT FROM_UNIXTIME(1735660800);
-- 结果: 2025-01-01 00:00:00

-- 指定格式
SELECT FROM_UNIXTIME(1735660800, '%Y-%m-%d %H:%i:%s');
-- 结果: 2025-01-01 00:00:00
日期转时间戳
-- 日期转时间戳
SELECT UNIX_TIMESTAMP('2025-01-01 00:00:00');
-- 结果: 1735660800

-- 存储时间戳(INT类型)
CREATE TABLE events (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_time INT UNSIGNED,  -- 存储秒级时间戳
    created_at BIGINT UNSIGNED  -- 存储毫秒级时间戳
);

INSERT INTO events (event_time, created_at) 
VALUES (UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW(3)) * 1000);

🖥️Bash/Shell

获取当前时间戳
# 获取当前时间戳(秒级)
date +%s
# 输出: 1735660800

# 获取当前时间戳(毫秒级)
date +%s%3N
# 输出: 1735660800000
时间戳转日期
# 时间戳转日期
date -d @1735660800
# 输出: Wed Jan  1 00:00:00 CST 2025

# 指定格式
date -d @1735660800 '+%Y-%m-%d %H:%M:%S'
# 输出: 2025-01-01 00:00:00
日期转时间戳
# 日期转时间戳
date -d '2025-01-01 00:00:00' +%s
# 输出: 1735660800

💜C#

获取当前时间戳
// 获取当前时间戳(秒级)
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
Console.WriteLine(timestamp);  // 1735660800

// 获取当前时间戳(毫秒级)
long timestampMs = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
Console.WriteLine(timestampMs);  // 1735660800000
时间戳转日期
// 时间戳转日期
long timestamp = 1735660800;
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timestamp);
DateTime date = dateTimeOffset.LocalDateTime;
Console.WriteLine(date.ToString("yyyy-MM-dd HH:mm:ss"));  // 2025-01-01 00:00:00
日期转时间戳
// 日期转时间戳
DateTime date = new DateTime(2025, 1, 1, 0, 0, 0);
long timestamp = new DateTimeOffset(date).ToUnixTimeSeconds();
Console.WriteLine(timestamp);  // 1735660800

💡 时间戳最佳实践

存储使用UTC时间戳

数据库存储始终使用UTC时间戳,避免时区问题

显示时转换用户时区

前端根据用户时区显示本地时间

API返回秒级或ISO格式

接口返回秒级时间戳或ISO 8601字符串

使用64位整数

避免2038年问题,新项目使用BIGINT存储