[英]DateFormatter wrong time output when a different month is selected
我的应用程序中有一个单独的 DatePicker 和 TimePicker 组件。
一旦用户选择了所需的日期和时间,我将构造一个新的Date
object,如下所示:
let timeStamp = Date(year: selectedDate.year, month: selectedDate.month, day: selectedDate.day, hour: selectedTime.hour, minute: selectedTime.minute)
然后我使用DateFormatter
到 output 用户选择的确切时间如下:
let formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
formatter.string(from: timeStamp)
现在我有一个非常奇怪的错误,有时时间 output 是正确的(时间将以 UTC+2 显示),有时它会不正确(时间将以 UTC+1 显示),我完全不知道会是什么造成这种情况。
示例 1(正确输出):
User selects: May 26, 2020 - 18:38
Date ISO output: "2020-05-26T16:38:00Z"
DateFormatter output: "18:38"
This is the correct output
示例 2(错误输出):
User selects: March 26, 2020 - 18:38
Date ISO output: "2020-03-26T16:38:00Z"
DateFormatter output: "17:38"
This is not the correct output. Time should be 18:38 like in the above example.
有人请告诉我这怎么可能? 从字面上看,唯一的区别是用户选择了 3 月而不是 5 月(不同的月份),并且由于某种原因混淆了 DateFormatter,因此时间 output 位于不同的时区。
我正在使用 SwiftDate 来处理一般的日期。
这可能是因为 5 月夏令时生效,与 UTC 的差异从 +1 变为 +2 小时
您可以使用当前的 TimeZone 并使用它添加配置您的 DateFormatter
let timezone = TimeZone.current
dateFormatter.timeZone = timezone
这应该确保您始终使用您的设备当前使用的相同时区
设置正确formatter.locale
,您可以尝试Locale(identifier: "en_US_POSIX")
或尝试使用formatter.timeZone
属性。 也许TimeZone.current
或TimeZone(secondsFromGMT: 0)
会解决你的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.