Swift中Calendar.dateComponents中的日期返回nil

Aug*_*sto 3 calendar date ios swift

我正在尝试创建Date具有日,月和年的对象,但是Calendar的功能正在返回nil

let calendar = Calendar.current
let date = calendar.dateComponents([.day,.month,.year], from: Date()).date! // <- nil
Run Code Online (Sandbox Code Playgroud)

如何Date仅使用日,月和年创建对象?

rma*_*ddy 8

如果要删除日期的时间部分(将其设置为午夜),则可以使用Calendar startOfDay

let date = Calendar.current.startOfDay(for: Date())
Run Code Online (Sandbox Code Playgroud)

这将为您提供当前日期的当地时间午夜。

如果您想要不同时区的当前日期的午夜,请创建一个新Calendar实例并timeZone根据需要设置它。


Mar*_*n R 5

作为补充rmaddy的回答,原因为什么你的代码的回报nil 是,你尝试转换DateComponentsDate无需指定 Calendar

如果该转换是通过日历方法完成的

let calendar = Calendar.current
let components = calendar.dateComponents([.day, .month, .year], from: Date())
let date = calendar.date(from: components)
Run Code Online (Sandbox Code Playgroud)

或者如果您将日历添加到日期组​​件

let calendar = Calendar.current
let date = calendar.dateComponents([.day, .month, .year, .calendar], from: Date()).date
Run Code Online (Sandbox Code Playgroud)

那么您将获得预期的结果。

  • 在原始代码中添加`.calendar`是一个非常好的见解。好信息。 (2认同)
  • 你的解释是有道理的,但是在我使用 Swift 5.2 的 REPL 中,我上面的示例仍然为零......有什么想法吗? (2认同)
  • @barley可能是这个错误:/sf/answers/4235348351/ (2认同)