组件日期错误

Wrong date from components

这很有趣:

po Calendar.default.date(from: DateComponents(year: 2022, month: 1, hour: 16, minute: 1, second: 1, weekday: 1, weekOfMonth: 1))
▿ Optional<Date>
  ▿ some : 2021-12-26 23:01:01 +0000
    - timeIntervalSinceReferenceDate : 662252461.0

我预计 2022 年 1 月 1 日,但我要到 2021 年 12 月 26 日?为什么要这样做?我做错了什么吗?

这是因为您提供的日期组件相互矛盾。您有 weekDay 1(可能是星期天或星期一,具体取决于您的语言环境)但 2022 年 1 月 1 日是星期六。

(当我认为你的意思是 Calendar.current 时你也使用了 Calendar.default?)

如果你去掉weekDay项你会得到正确答案:

Calendar.current.date(from: DateComponents(year: 2022, month: 1, hour: 16, minute: 1, second: 1, weekOfMonth: 1))

// "Jan 1, 2022 at 4:01 PM"

您也可以删除 weekOfMonth 项,因为在指定实际日期时它是多余的。