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

标签 ios swift nsdateformatter

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

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 +0000
4 Nov 2017
America/New_York (current)
1509753600.0
-----
2017-11-05 00:00:00 +0000
5 Nov 2017
America/New_York (current)
1509840000.0
-----
2017-11-06 00:00:00 +0000
5 Nov 2017
America/New_York (current)
1509926400.0
-----
2017-11-07 00:00:00 +0000
6 Nov 2017
America/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/

相关文章:

ios - 我们从服务器获取时间并更改为 iOS 7 中的本地时区?

ios - 带有请求完成处理程序的数据并不总是被调用

ios - CloudKit 在不同的 iCloud 帐户之间共享数据,但不是与所有人共享

ios - 将连接间隔从默认的 30 毫秒缩短

ios - 我返回的 UILabel 高度从来不准确

ios - 如何为 Google VR iOS pod 添加触摸手势?

android - Flutter - GestureDetector onTapDown 颜色变化

swift - 类型 'ChatViewController' 不符合协议(protocol) 'MessagesDataSource'

ios - 从 DateFormatter 得到错误的输出

ios - 将日期转换为 GMT 时间 Day Date Month Year Swift