我试图为下一个发生的未来时间获取一个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英寸EST
因为dateComponents将时区设置为UTC,将小时设置为18,所以我早就预料到日期会是2019-02-09 18:00:00 +0000。此外,更改时区似乎对找到的nextDate没有影响。
为什么nextDate函数不遵守传递给它的dateComponents中设置的时区?

最佳答案

我住在格林尼治时间,在操场上运行这个程序会产生您期望的结果。您正在设置日期组件的时区,但我可以想象您自己的日历(calendar.current)设置为EST。您需要在EST与GMT中说明所需结果的偏移量

关于swift - Swift Calendar.current.nextDate timeZone问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54602750/

10-10 00:17