【发布时间】:2017-07-08 16:46:28
【问题描述】:
在我提交雷达之前,我想仔细检查一下我是否没有遗漏任何东西(并从中吸取教训)。这是我在 Swift 3 操场上的测试代码(代码在我的应用程序中的行为相同)。我目前在“欧洲/里斯本”时区工作,该时区在 2 月与格林威治标准时间相同。
import UIKit
let date = Date(timeIntervalSince1970: 0)
var formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
print(TimeZone.current.abbreviation()!) // GMT
formatter.timeZone = TimeZone.current
print(formatter.string(from: date)) // 01:00
formatter.timeZone = TimeZone(secondsFromGMT: TimeZone.current.secondsFromGMT())
print(formatter.string(from: date)) // 00:00
formatter.timeZone = TimeZone(identifier: "Europe/London")
print(formatter.string(from: date)) // 01:00
formatter.timeZone = TimeZone(identifier: "America/Los_Angeles")
print(formatter.string(from: date)) // 16:00
不知何故,格式化的时间是一小时,除非我将时区设置为
TimeZone(secondsFromGMT: TimeZone.current.secondsFromGMT())
这是预期的行为吗?谢谢!
【问题讨论】:
-
我遇到了类似的日期问题。我的问题是由格式化程序引起的,而不是由时区引起的。 Swift 中的 NSDate 或 Date 仅适用于 UTC。格式化程序负责表示。就我而言,我必须将格式化程序的日历属性设置为公历,然后一切都按预期工作。
标签: ios swift timezone dateformatter