如何为Date Picker添加时区?附现有代码及目标格式示例
为Date Picker添加时区并输出指定ISO8601格式
要让Date Picker的输出带上明确的时区信息(比如你想要的2018-04-10T04:24:24.443980+08:00格式),只需要给你的ISO8601DateFormatter显式设置时区属性就行,我给你调整了代码并解释细节:
修改后的iOS 11+兼容代码
@available(iOS 11.0, *) func donePressed() { let formatter = ISO8601DateFormatter() // 保留你原本的微秒设置 formatter.formatOptions.insert(.withFractionalSeconds) // 设置目标时区,这里以东八区(上海时区)为例 formatter.timeZone = TimeZone(identifier: "Asia/Shanghai") let dateString = formatter.string(from: picker.date) choreSchedule.text = dateString }
关键细节说明
- 时区设置:
TimeZone(identifier: "Asia/Shanghai")对应标准东八区,会自动处理夏令时(如果该时区有相关规则);如果你想直接用固定偏移量,也可以写TimeZone(secondsFromGMT: 8 * 3600),但推荐用时区标识符更准确。 - 时区自动显示:
ISO8601DateFormatter在设置时区后,会自动在输出字符串中带上对应的时区偏移(比如+08:00),不需要额外配置格式选项。 - 如果需要兼容iOS 11以下版本:
可以用DateFormatter手动构造格式字符串,代码如下:
这里的func donePressed() { let formatter = DateFormatter() // 匹配你要的格式:年-月-日T时:分:秒.微秒+时区偏移 formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZZZZ" formatter.timeZone = TimeZone(identifier: "Asia/Shanghai") let dateString = formatter.string(from: picker.date) choreSchedule.text = dateString }SSSSSS对应6位微秒,ZZZZZ对应+08:00格式的时区偏移。
这样修改后,你就能得到符合要求的带时区的日期字符串啦。
内容的提问来源于stack exchange,提问作者user9606220
相关产品推荐
相关产品推荐

