swift - Swift Calendar.current.nextDate timeZone 问题
问题描述
我正在尝试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
传递给它的时区设置?
解决方案
看起来 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)
推荐阅读
- ffmpeg - FFMPEG 卡在单帧上,速度小于 1 倍
- pandas - 将 DataFrame [df] 附加到现有 Excel 文件的现有工作表 - 辅助函数不起作用
- c - 当文件被另一个程序打开时自动文件缓冲区刷新*仅当*其他程序尚未运行 (macOS)
- c++ - <链表C ++中结构成员的运算符重载
- github - Automatically run the workflow on the main repo when a submodule repo changes
- node.js - Web 应用程序 - 访问 Windows Server 文件共享 - 是否可行且安全?
- python-3.x - int32 和 float32 的图像有什么区别?
- javascript - 使用 Typescript 解析大 JSON 文件
- amazon-web-services - Amazon 设备 SDK(MQTT 客户端)在未检测到断开连接的情况下断开连接
- google-cast - 如何忽略 Web 接收器中的加载请求?