如何将ISO格式的日期时间字符串转换为易读的自定义格式
实现方案指引
常见报错原因
- 未正确识别字符串中的时区偏移后缀(
-06:00),部分语言的DateTime默认构造函数不支持直接解析带偏移的ISO 8601格式 - 格式化时未指定12小时制标记,导致输出24小时制结果
- 时区转换逻辑缺失,直接提取UTC时间输出导致小时数错误
通用实现步骤
- 用支持ISO 8601带偏移解析的方法完成时间对象初始化,不要用默认无参数的DateTime构造函数
- 可选:如果需要转换为本地时区显示,调用对应时区转换方法调整时间
- 按目标格式输出,核心格式化占位符对应关系:
- 无前导零月份:
M - 无前导零日期:
d - 两位年份:
yy - 12小时制无前导零小时:
h - 分钟:
mm - 小写上午/下午标记:
tt(部分语言用a)
- 无前导零月份:
常用场景代码示例
JavaScript 环境
const isoStr = '2021-08-18T22:24:49-06:00'; const date = new Date(isoStr); // 格式化输出 const formatted = `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear().toString().slice(-2)} ${date.getHours() % 12 || 12}:${date.getMinutes().toString().padStart(2, '0')}${date.getHours() >= 12 ? 'pm' : 'am'}`; // 输出结果:8/18/21 10:24pm
Python 环境
from datetime import datetime iso_str = '2021-08-18T22:24:49-06:00' # 解析带时区的ISO字符串 date = datetime.fromisoformat(iso_str) # 格式化输出 formatted = date.strftime('%-m/%-d/%y %-I:%M%p').lower() # 输出结果:8/18/21 10:24pm # 注:Windows环境下无前导零占位符替换为`#`,即`%#m/%#d/%y %#I:%M%p`
C# 环境
string isoStr = "2021-08-18T22:24:49-06:00"; DateTimeOffset date = DateTimeOffset.Parse(isoStr); string formatted = date.ToString("M/d/yy h:mmtt").ToLower(); // 输出结果:8/18/21 10:24pm
内容的提问来源于stack exchange,提问作者Kode_12
相关产品推荐
相关产品推荐

