You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:03:19