【发布时间】:2020-11-03 05:53:48
【问题描述】:
我正在使用
Calendar.current.date(byAdding: .day, value: -1, to: somedate) ?? somedate
从某个日期减少 1 天。由于夏令时于 2020 年 11 月 1 日结束。当我尝试在 2020 年 11 月 2 日 0hr:0m:0s 的日期对象执行此操作时,我希望它返回 2020 年 11 月 1 日 0hr:0m:0s,但是而是返回 2020 年 10 月 31 日 23hr:0m:0s。
是我做错了什么还是其他问题?
如何重现:-
- 使用时间戳 1604275200 创建一个日期对象。使用
Date(timeIntervalSince1970: 1604275200) - 将您设备的时区更改为考虑夏令时的某个地方。我在
HST时区试过了 - 尝试使用上述方法缩短天数。
- 您会看到日期返回为 10 月 31 日。
extension Date {
init(timeIntervalInMillis: Double) {
self.init(timeIntervalSince1970: timeIntervalInMillis / 1000)
}
func add(_ component: Calendar.Component, value: Int) -> Date {
return Calendar.current.date(byAdding: .day, value: value, to: self) ?? self
}
var noon: Date {
return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
}
print(Calendar.current.timeZone.identifier)
let date = Date(timeIntervalInMillis: 1604275200000)
print("Date is ",date)
print("Yesterday's date is ",date.add(.day, value: -1))
print("Noon time is ",date.noon)
print("Yesterday date from noon's date is ",date.noon.add(.day, value: -1))
输出:
America/Chicago
Date is 2020-11-02 00:00:00 +0000
Yesterday's date is 2020-10-31 23:00:00 +0000
Noon time is 2020-11-01 18:00:00 +0000
Yesterday date from noon's date is 2020-10-31 17:00:00 +0000
任何帮助将不胜感激。
【问题讨论】:
-
在上面添加。请检查
标签: ios swift iphone xcode12 xcode11.3