怎么用脚本转换日期时间格式(Python/Shell/JavaScript实战)
目录导读
- 为什么需要脚本转换日期时间格式?
- Python脚本实现日期时间格式转换
- 1 使用
datetime库的基础转换 - 2 处理时区与国际化格式
- 3 实战:批量转换日志文件中的时间戳
- 1 使用
- Shell脚本轻松转换Unix时间戳
- 1 使用
date命令转换常见格式 - 2 处理毫秒级时间戳与字符串
- 1 使用
- JavaScript前端/Node.js日期时间格式化
- 1 原生
Date对象与toLocaleString - 2 使用
Day.js轻量库快速转换
- 1 原生
- 常见问题问答(FAQ)
- 总结与最佳实践
为什么需要脚本转换日期时间格式?
在日常开发、数据分析、日志处理或网站SEO优化中,日期时间格式的转换是最高频的需求之一。

- 数据库中的
2024-12-09 14:30:00需要转为2024年12月9日 下午2:30 - API返回的时间戳
1702123800需要显示为可读日期 - 爬虫抓取的
December 9, 2024需要统一为ISO标准格式
手动修改几十条数据尚可接受,但面对成千上万的日志行或用户数据,脚本批量转换是唯一高效的选择,下面我们以Python、Shell和JavaScript三种最常用的脚本语言为例,手把手教你实现精准转换。
Python脚本实现日期时间格式转换
1 使用datetime库的基础转换
Python内置的datetime模块是处理日期时间格式的瑞士军刀,以下示例展示如何将常见字符串转为任意目标格式:
from datetime import datetime
# 原始字符串格式
date_str = "2024-12-09 14:30:00"
# 先解析为datetime对象
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
# 再格式化为目标格式
new_format = dt.strftime("%Y年%m月%d日 %H:%M")
print(new_format) # 输出:2024年12月09日 14:30
关键点:strptime用于解析(字符串→对象),strftime用于格式化(对象→字符串),常见格式码:
%Y:四位年份%m:两位月份%d:两位日期%H:24小时制时%I:12小时制时%p:AM/PM
2 处理时区与国际化格式
当需要处理不同时区(如UTC转北京时间)或国际格式(如Fri, 09 Dec 2024 06:30:00 +0000)时,需要引入pytz库:
pip install pytz
from datetime import datetime
import pytz
# UTC时间字符串
utc_str = "2024-12-09T06:30:00Z"
utc_dt = datetime.strptime(utc_str, "%Y-%m-%dT%H:%M:%SZ")
utc_dt = utc_dt.replace(tzinfo=pytz.UTC)
# 转为北京时间
beijing_tz = pytz.timezone("Asia/Shanghai")
beijing_dt = utc_dt.astimezone(beijing_tz)
print(beijing_dt.strftime("%Y-%m-%d %H:%M:%S")) # 2024-12-09 14:30:00
3 实战:批量转换日志文件中的时间戳
假设你有以下server.log日志文件:
[1702123800] ERROR: Connection timeout
[1702123860] INFO: Retry attempt 1
需要将所有Unix时间戳转为可读日期:
import re
with open("server.log", "r") as f:
content = f.read()
def convert_timestamp(match):
ts = int(match.group(1))
dt = datetime.fromtimestamp(ts) # 默认本地时区
return dt.strftime("%Y-%m-%d %H:%M:%S")
new_content = re.sub(r'\[(\d+)\]', convert_timestamp, content)
print(new_content)
Shell脚本轻松转换Unix时间戳
在Linux/macOS环境中,Shell脚本处理日期转换极为高效,核心命令是date。
1 使用date命令转换常见格式
# 将时间戳转为标准日期 timestamp=1702123800 date -d @$timestamp "+%Y-%m-%d %H:%M:%S" # 输出:2024-12-09 14:30:00 # 将当前时间转为自定义格式 date "+%Y年%m月%d日 %H:%M" # 输出:2024年12月09日 14:30 # 解析并转换特定字符串(macOS需用-j -f) date -d "2024-12-09 14:30:00" "+%s" # 转为时间戳 # 输出:1702123800
2 处理毫秒级时间戳与字符串
许多系统(如Java/JavaScript)使用毫秒级时间戳(13位数字),需要先除以1000:
ms_timestamp=1702123800123 sec=$((ms_timestamp / 1000)) date -d @$sec "+%Y-%m-%d %H:%M:%S" # 输出:2024-12-09 14:30:00
批量处理技巧:结合while read循环,逐行转换CSV文件中的时间列:
# 假设csv文件第二列为时间戳
while IFS=',' read col1 col2 col3; do
readable=$(date -d @$col2 "+%Y-%m-%d %H:%M")
echo "$col1,$readable,$col3"
done < input.csv > output.csv
JavaScript前端/Node.js日期时间格式化
1 原生Date对象与toLocaleString
在前端开发中,无需额外库即可完成基础转换:
// 时间戳转为日期字符串
const ts = 1702123800000; // 毫秒时间戳
const date = new Date(ts);
console.log(date.toISOString()); // 2024-12-09T06:30:00.000Z
// 转为中文格式
console.log(date.toLocaleString('zh-CN', {
year: 'numeric', month: 'long', day: 'numeric',
hour: '2-digit', minute: '2-digit', second: '2-digit'
}));
// 输出:2024年12月9日 14:30:00
2 使用Day.js轻量库快速转换
当需要多种格式组合或时区转换时,推荐使用day.js(仅2KB,可替代Moment.js):
npm install dayjs
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
// 自定义格式转换
const input = '2024-12-09 14:30:00';
const formatted = dayjs(input).format('YYYY/MM/DD HH:mm:ss');
console.log(formatted); // 2024/12/09 14:30:00
// 时区转换(UTC转上海时间)
const utcTime = dayjs.utc('2024-12-09 06:30:00');
const shanghai = utcTime.tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
console.log(shanghai); // 2024-12-09 14:30:00
常见问题问答(FAQ)
Q1:为什么Python中strptime解析时会报错“unconverted data remains”?
A:通常是因为原始字符串末尾有多余空格或字符,建议先使用.strip()清理字符串,或指定准确的格式码避免遗漏。
Q2:Shell脚本中date -d在macOS上无效怎么办?
A:macOS的date命令语法不同,需要使用date -j -f "输入格式" "输入字符串" "+输出格式"。date -j -f "%Y-%m-%d" "2024-12-09" "+%s"。
Q3:JavaScript中new Date()解析不同浏览器结果不一致?
A:某些浏览器对非标准日期字符串(如2024-12-09 14:30)解析有歧义,建议统一使用ISO 8601格式(YYYY-MM-DDTHH:mm:ss)或手动拆解字符串进行转换。
Q4:有现成的在线工具可以批量转换吗?
A:有,例如www.epochconverter.com和timestamp-converter.com可在线转换少量数据,但涉及敏感数据或大量文件时,仍强烈建议使用本地脚本。
Q5:如何将“2024年12月9日”转为标准日期?
A:Python中需自定义解析逻辑(中文年月日),
import re
cn_date = "2024年12月9日"
match = re.match(r"(\d{4})年(\d{1,2})月(\d{1,2})日", cn_date)
dt = datetime(int(match.group(1)), int(match.group(2)), int(match.group(3)))
总结与最佳实践
| 脚本语言 | 适用场景 | 核心工具 | 推荐库 |
|---|---|---|---|
| Python | 复杂转换、大数据分析 | datetime.strptime/strftime |
pytz, dateutil |
| Shell | 服务器日志、快速处理 | date命令 |
无 |
| JavaScript | 前端显示、Node.js后端 | Date对象 |
day.js, luxon |
最佳实践建议:
- 始终明确输入格式和输出格式,避免使用不明确的格式码(如
%c)。 - 处理用户输入时,统一使用ISO 8601标准格式(如
2024-12-09T14:30:00Z)作为中间格式,再转换显示。 - 批量处理前,先用小样本数据验证结果正确性。
- 涉及时区时,优先使用UTC作为中间存储格式,显示时再转为用户时区。
通过上述脚本方法,你可以轻松应对日常开发中95%的日期时间格式转换需求,从手动调格式到一键批量转换,只需几行代码,效率提升立竿见影。