我已经阅读了多篇关于此的帖子,其中大多数是由于未设置特定的时区而系统获取当前时区。我的情况略有不同,并给出了意想不到的结果,所以我将尝试详细解释。
我正在处理一个后端,该后端将日期拆分为日期和时间,并存储为整数值。例如,返回值可以是131006
,它会转换为13:10:06
。我知道这个后端总是返回UTC的日期。我将其转换为字符串,然后使用以下代码将字符串转换为日期:
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HHmmss"
timeFormatter.timeZone = TimeZone(identifier: "UTC")
let time = timeFormatter.date(from: "131006")
为了做一些检查,我在这段代码中写了一些打印语句。这里最重要的是print(timeFormatter.timeZone.abbreviation())
,它返回Optional("GMT")
。这很好,正如预期的那样,因为 GMT == UTC。我还检查了 time 的值,它返回2000-01-01 13:10:06 +0000
,这仍然是预期的结果。
现在转到代码,然后我将日期格式化为所需的字符串,并带有所需的时区:
let timeToString = DateFormatter()
timeToString.dateFormat = "HH:mm"
timeToString.timeZone = TimeZone.current
let timeString = timeToString.string(from: time!)
在这段代码中,我还打印了TimeZone.current.abbreviation())
返回的属性,这Optional("GMT+2")
又是预期的结果。但是,当我们打印timeString
变量的值时,输出是14:10
,而不是预期的结果15:10
。
我使用 DateFormatter 的方式有什么问题?谢谢!