Swift Calendar.current.nextDate 时区问题



我正在尝试为下一个发生的未来时间获取一个Date对象,其中UTC时间的小时数为18。但是我的代码没有按预期工作。我有以下几点:

let dateComponents = DateComponents(timeZone: TimeZone(abbreviation: "GMT"), hour: 18)
let date = Calendar.current.nextDate(after: Date(), matching: dateComponents, matchingPolicy: .nextTime)
print(date)

问题是这会导致2019-02-09 23:00:00 +0000

该日期是下一个发生的时间,其中小时是 18 in EST

我本来期望,因为dateComponents将时区设置为 UTC,将小时设置为 18,因此日期会2019-02-09 18:00:00 +0000. 此外,更改时区似乎对找到nextDate没有影响。

为什么 nextDate 函数不遵循传递给它的dateComponents中设置的时区?

看起来日期组件中的时区被忽略了。但是,当您在新日历中设置时区时,您将获得正确的结果。

let dateComponents = DateComponents(hour: 18)
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let date = calendar.nextDate(after: Date(), matching: dateComponents, matchingPolicy: .nextTime)
print(date) // Optional(2020-09-29 18:00:00 +0000)

我生活在格林威治标准时间,在操场上运行它会产生您正在寻找的预期结果。您正在设置日期组件的时区,但我想您自己的日历(Calendar.current(设置为EST。您需要考虑 EST 与 GMT 的偏移量,以获得所需的结果

最新更新