You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将ISO 8601字符串转换为本地日期时间及指定多语言日期格式

嘿,这个需求太常见了!不管是前端还是后端开发,处理ISO 8601时间格式转本地时间、自定义格式都是高频操作。我给你整理了JavaScript和Python两种主流语言的解决方案,直接抄作业就行👇

一、ISO 8601字符串转本地日期时间

首先要明确:ISO 8601里的Z代表UTC时区,所以转换时需要先解析UTC时间,再转成本地时区的时间。

JavaScript方案

直接用原生Date对象就能搞定,它会自动处理时区转换:

const isoTimeStr = '2018-03-08T08:30:00.000Z';
// 解析ISO字符串为Date对象,自动转换为本地时区
const localDateTime = new Date(isoTimeStr);

// 如果你需要本地格式的字符串,用toLocaleString()
console.log(localDateTime.toLocaleString()); 
// 比如在北京时间会输出:"2018/3/8 16:30:00"(因为UTC+8)

Python方案

需要借助datetime模块,注意要先把Z替换为+00:00才能被fromisoformat识别:

from datetime import datetime

iso_time_str = '2018-03-08T08:30:00.000Z'
# 处理Z为UTC时区标识,解析为UTC时间
utc_datetime = datetime.fromisoformat(iso_time_str.replace('Z', '+00:00'))
# 转换为本地时区时间
local_datetime = utc_datetime.astimezone()

print(local_datetime)
# 比如在北京时间会输出:"2018-03-08 16:30:00+08:00"
二、转指定格式(英语'March 8 2018' & 德语'8. März 2018')

这里推荐用语言原生的国际化API,比手动拼接字符串靠谱多了,还能自动处理语言特有的格式和月份名称。

JavaScript方案

Intl.DateTimeFormat,支持多语言,无需额外依赖:

const isoTimeStr = '2018-03-08T08:30:00.000Z';
const date = new Date(isoTimeStr);

// 转英语格式:'March 8 2018'
const enFormatted = new Intl.DateTimeFormat('en-US', {
  month: 'long', // 完整月份名
  day: 'numeric', // 数字日期
  year: 'numeric' // 数字年份
}).format(date);
console.log(enFormatted); // 输出:"March 8 2018"

// 转德语格式:'8. März 2018'
const deFormatted = new Intl.DateTimeFormat('de-DE', {
  day: 'numeric',
  month: 'long',
  year: 'numeric'
}).format(date);
console.log(deFormatted); // 输出:"8. März 2018"

Python方案

需要用到strftime和locale设置,注意系统要支持对应的语言包:

from datetime import datetime
import locale

iso_time_str = '2018-03-08T08:30:00.000Z'
utc_datetime = datetime.fromisoformat(iso_time_str.replace('Z', '+00:00'))
local_datetime = utc_datetime.astimezone()

# 转英语格式:'March 8 2018'
# %B是完整月份名,%d是日期,%Y是四位数年份,replace去掉日期前的0
en_formatted = local_datetime.strftime('%B %d %Y').replace(' 0', ' ')
print(en_formatted) # 输出:"March 8 2018"

# 转德语格式:'8. März 2018'
# 设置德语locale,不同系统写法可能不同:Linux用'de_DE.UTF-8',Windows用'German_Germany.1252'
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
de_formatted = local_datetime.strftime('%d. %B %Y')
print(de_formatted) # 输出:"8. März 2018"

注意:你例子里的年份从2018变成2016应该是笔误,上面的代码都用了和输入一致的2018年份哦~

内容的提问来源于stack exchange,提问作者Nahro

火山引擎 最新活动