我一直在寻找一种方法将本地时区保存到属性中,以便稍后我需要在UI中显示格式化日期时使用它来格式化日期。
我发现TimeZone.current.abbreviation()
可以为我返回缩写,我可以使用该缩写来格式化日期,但我注意到它返回String?
而不是String
。
我已经检查了official document,但没有发现该API返回可选字符串或可能是失败案例的原因。
我目前存储时区的解决方案是let timeZone = TimeZone.current.abbreviation()!
,但我不确定强行打开它是否安全。有谁知道强制解包返回的缩写是否安全,或者为什么API返回一个可选值?感谢。
答案 0 :(得分:0)
虽然没有记录,但我想说必须有一个返回值是可选的原因。所以它将失败有时只需检查可选项:
if let abbr = TimeZone.current.abbreviation() {
// use abbreviation
} else {
// fall back on something else
}
无论如何,几乎每个选项都应该这样做。
我认为这里更重要的是你决定如何设定日期格式。根据你的措辞,我怀疑你没有使用DateFormatter
(否则你不需要存储缩写)。
使用DateFormatter
!
只需存储TimeZone.current
(整个TimeZone
对象)并将其分配给dateFormatter.timeZone
。格式化程序将为您解决所有问题。您可以使用yyyy/MM/dd/ HH:mm:ss zzz
:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd/ HH:mm:ss zzz"
formatter.timeZone = TimeZone(identifier: "Asia/Shanghai")
formatter.string(from: Date())
您似乎也想表明它是否是夏令时。使用isDaylightSavingTime
的{{1}}方法进行检查。您最后可以添加TimeZone
之类的字符串。