各编程语言时间戳代码示例
获取、转换、格式化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存储