gpt4 book ai didi

ios - 某些日期的 DateFormatter.localizedString 已损坏

转载 作者:行者123 更新时间:2023-11-28 12:16:36 32 4
gpt4 key购买 nike

这是我在选择器更改时所做的:

extension Date {
var fromCurrentToUTC: Date {
return addingTimeInterval(-TimeInterval(TimeZone.current.secondsFromGMT()))
}
}


var title = "--"

if let date = datePickerView.date?.fromCurrentToUTC {
title = DateFormatter.localizedString(from: date, dateStyle: .medium, timeStyle: .none)
}

print("-----")
print(datePickerView.date!)
print(title)
print(TimeZone.current)
print(datePickerView.date!.timeIntervalSince1970)

dateTimeSegmentControl.setTitle(title, forSegmentAt: 0)

这是它查找日期的方式:

enter image description here enter image description here enter image description here enter image description here

假设。 11 月 6 日之前的日期一切都很好,11 月 6 日之后一切都关闭了。为什么?

更新:

我使用的每个时区的关键日期都不同。例如:

华沙 (+0200) 日期是 10 月 30 日芝加哥 (-0500) 日期是 11 月 6 日

有序打印:

-----2017-11-04 00:00:00 +00004 Nov 2017America/New_York (current)1509753600.0-----2017-11-05 00:00:00 +00005 Nov 2017America/New_York (current)1509840000.0-----2017-11-06 00:00:00 +00005 Nov 2017America/New_York (current)1509926400.0-----2017-11-07 00:00:00 +00006 Nov 2017America/New_York (current)1510012800.0

最佳答案

在你的函数中

extension Date {
var fromCurrentToUTC: Date {
return addingTimeInterval(-TimeInterval(TimeZone.current.secondsFromGMT()))
}
}

减去当前日期的 GMT 偏移量,而不是根据要调整的日期的 GMT 偏移量。因此你得到如果要调整的日期在夏令时期间而当前日期不在夏令时期间,则结果错误,反之亦然。

这可以通过使用来修复

extension Date {
var fromCurrentToUTC: Date {
return addingTimeInterval(-TimeInterval(TimeZone.current.secondsFromGMT(for: self)))
}
}

相反。但是,更好的解决方案是设置时区将日期格式化程序转换为 UTC,而不是调整日期:

if let date = datePickerView.date {
let fmt = DateFormatter()
fmt.dateStyle = .medium
fmt.timeStyle = .none
fmt.timeZone = TimeZone(secondsFromGMT: 0)
let title = fmt.string(from: date)
print(title)
}

关于ios - 某些日期的 DateFormatter.localizedString 已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46320207/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com