Swift中如何将日期转为形如"2018-09-19T17:00:00Z"的指定格式字符串?
嘿,这个问题我之前也碰到过!你的代码现在输出带时区偏移的格式,是因为两个关键点没调整对——时区设置和日期格式符的选择,我来给你拆解一下怎么改:
核心问题解析
你想要的Z是UTC(零时区)时间的专属标识,而当前代码用了TimeZone.current(设备本地时区),所以输出的是对应时区的偏移值(比如+0700);另外,原格式里的Z是RFC 822风格的时区格式,哪怕切到UTC,它也会输出+0000而不是你要的Z。
修改方案
1. 切换到时区为UTC
把日期格式化器的时区改成UTC,两种常用写法都可以:
// 方式1:使用时区标识符 dateFormatter.timeZone = TimeZone(identifier: "UTC") // 方式2:直接设置零时差 dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
2. 调整格式符为X
把原格式字符串里的Z换成X,X是ISO 8601标准的时区格式符,当时区为UTC时会自动输出Z。
完整修改后的代码
let format = "yyyy-MM-dd'T'HH:mm:ssX" let dateFormatter = DateFormatter() dateFormatter.dateFormat = format dateFormatter.timeZone = TimeZone(identifier: "UTC") let date = Date() print(dateFormatter.string(from: date))
运行这段代码,输出就会是你想要的2018-09-19T17:00:00Z这种格式了。
额外小技巧:用系统内置的ISO格式化器
如果你不想手动写格式字符串,也可以用ISO8601DateFormatter,它专门处理ISO标准的日期格式,代码更简洁且不易出错:
let isoFormatter = ISO8601DateFormatter() isoFormatter.timeZone = TimeZone(identifier: "UTC") isoFormatter.formatOptions = [.withInternetDateTime] let date = Date() print(isoFormatter.string(from: date))
这个同样能输出符合需求的格式哦~
内容的提问来源于stack exchange,提问作者Tien-Nvan
相关产品推荐
相关产品推荐

