Swift中无法将Date对象时间部分置零的问题排查
问题原因与解决方案
问题本质
问题出在时区不匹配:
- 代码里的
Calendar.current采用Mac本地时区(GMT-09:00),而输入的2024-11-27 13:41:21 +0000是UTC时间,对应本地时区的时间为2024-11-27 04:41:21 GMT-0900。 - 提取本地时区的年月日(27号)后,生成的是本地时区当天的00:00,这个时间转换回UTC就会出现偏移(你看到的
2024-11-26 09:00:00 +0000是时区换算后的结果)。
解决方案
要生成UTC时区的当天00:00,需要强制日历使用UTC时区,修改后的扩展方法如下:
func nullifyTime() -> Date { var calendar = Calendar.current calendar.timeZone = .utc // 指定使用UTC时区 let dateComponents = calendar.dateComponents([.year, .month, .day], from: self) return calendar.date(from: dateComponents) ?? Date() }
说明
- 给日历设置
timeZone = .utc后,提取的年月日是UTC时区下的日期信息,生成的日期自然就是UTC时区当天的00:00,完全符合期望输出2024-11-27 00:00:00 +0000。 - 如果需要适配其他时区,可将时区设为参数,增强方法的灵活性。
内容的提问来源于stack exchange,提问作者Evgeniy Kleban
相关产品推荐
相关产品推荐

