如何解决当夏令时结束时,日期对象中的添加/减少日期返回错误的日期
我正在使用
Calendar.current.date(byAdding: .day,value: -1,to: somedate) ?? somedate
从某个日期开始减少1天。由于夏令时于2020年11月1日结束。当我尝试在2020年11月2日执行此操作时,我希望它返回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
任何帮助将不胜感激。
解决方法
编辑/更新:
您的代码没有错。您的问题是,您正在打印UTC日期表示形式,而不是使用时区设置为“芝加哥”的DateFormatter来在所需时区显示结果日期。
print("Date is ",date) // Date is 2020-11-02 00:00:00 +0000\n"
print("Yesterday's date is ",date.add(.day,value: -1)) // "Yesterday's date is 2020-10-31 23:00:00 +0000\n"
print("Noon time is ",date.noon) // "Noon time is 2020-11-01 18:00:00 +0000\n"
print("Yesterday date from noon's date is ",date.noon.add(.day,value: -1)) // "Yesterday date from noon's date is 2020-10-31 17:00:00 +0000\n"
let fmter = DateFormatter()
fmter.timeZone = TimeZone(identifier: "America/Chicago")!
fmter.dateStyle = .full
fmter.timeStyle = .full
print("Date is ",fmter.string(from: date)) // "Date is Sunday,1 November 2020 18:00:00 Central Standard Time\n"
print("Yesterday's date is ",fmter.string(from: date.add(.day,value: -1))) // "Yesterday's date is Saturday,31 October 2020 18:00:00 Central Daylight Time\n"
print("Noon time is ",fmter.string(from: date.noon)) // "Noon time is Sunday,1 November 2020 12:00:00 Central Standard Time\n"
print("Yesterday date from noon's date is ",fmter.string(from: date.noon.add(.day,value: -1))) // "Yesterday date from noon's date is Saturday,31 October 2020 12:00:00 Central Daylight Time\n"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。