繁体   English   中英

选择不同月份时,DateFormatter 错误时间 output

[英]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.currentTimeZone(secondsFromGMT: 0)会解决你的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM