DateFormatter.localizedString在某些date被打破
这是我在select器更改时所做的:
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)
这就是它看起来如何的date:
假设。 11月6日之前的date一切正常,11月6日之后一切都closures了。 为什么?
更新:
对于我使用的每个时区来说,这个关键date是不同的。 例如:
华沙(+0200)的date是10月30日芝加哥(-0500)的date是11月6日
订购的印刷品:
----- 2017-11-04 00:00:00 +0000 2017年11月4日 America / New_York(current) 1509753600.0 ----- 2017-11-05 00:00:00 +0000 2017年11月5日 America / New_York(current) 1509840000.0 ----- 2017-11-06 00:00:00 +0000 2017年11月5日 America / New_York(current) 1509926400.0 ----- 2017-11-07 00:00:00 +0000 2017年11月6日 America / New_York(current) 1510012800.0
在你的function
extension Date { var fromCurrentToUTC: Date { return addingTimeInterval(-TimeInterval(TimeZone.current.secondsFromGMT())) } }
将减去当前date的GMT偏移量,而不是由要调整的date的GMT偏移量。 因此,如果要调整的date处于DST期间且当前date不是,则反之亦然。
这可以通过使用来解决
extension Date { var fromCurrentToUTC: Date { return addingTimeInterval(-TimeInterval(TimeZone.current.secondsFromGMT(for: self))) } }
代替。 但是,更好的解决scheme是将date格式化程序的时区设置为UTC,而不是调整date:
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) }
- Rational Test Workbench iPhone – 无法合并原始二进制文件,无法合并检测到的二进制文件
- 每个iOS开发人员都应使用的10个开发工具
- 是否有可能列出所有的应用程序安装在iPhone设备的图标桌面视图?
- 不能解决“模糊使用下标”
- IOS在应用程序间共享数据
- join一个不同的最终分隔符的string数组
- 获取部分中的所有indexPath
- UINavigationController中的viewControllers有可能有不同的方向吗?
- stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)在Swift中返回Optional