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

如何将90天前日期的时间清零为00:00:00 +0000?

问题分析与解决方案

问题根源

  1. 时区干扰:你使用的Calendar.current是本地时区日历,设置的00:00:00是本地时区的午夜,转换为UTC时区就会显示为前一天的23:00:00 +0000(比如本地时区为UTC+1时)。
  2. 日期计算偏差:原代码先取当前年月生成当月第一天的日期,再往前推90天,这不是从当天开始计算的90天前日期,导致结果偏差。

修正代码

要得到UTC时区的90天前00:00:00时间,需使用UTC日历来处理:

print("LAST NINETY DAYS")

// 创建UTC时区的日历实例
let utcCalendar = Calendar(identifier: .gregorian)
utcCalendar.timeZone = TimeZone(identifier: "UTC")!

// 获取当前日期的UTC午夜时间(00:00:00 +0000)
var todayUtcComponents = utcCalendar.dateComponents([.year, .month, .day], from: Date())
todayUtcComponents.hour = 0
todayUtcComponents.minute = 0
todayUtcComponents.second = 0
let todayUtcMidnight = utcCalendar.date(from: todayUtcComponents)!

// 计算90天前的UTC午夜时间
let ninetyDaysAgoUtcMidnight = utcCalendar.date(byAdding: .day, value: -90, to: todayUtcMidnight) ?? Date()

print(ninetyDaysAgoUtcMidnight)
print(Date())

firstAndLastDateObj.firstDate = ninetyDaysAgoUtcMidnight
firstAndLastDateObj.lastDate = Date()

代码说明

  • 用UTC日历处理日期,确保时间设置和计算都基于UTC时区,避免本地时区转换导致的时间偏移。
  • 先获取当天的UTC午夜时间,再往前推90天,保证日期计算的准确性。

内容的提问来源于stack exchange,提问作者Author

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:21:01