我正在寻找一种将本地时区域保存到属性的方法,以便我可以使用它来格式化日期,当时我需要稍后在UI中显示格式化日期。<<<<<<<<<<<<
我发现TimeZone.current.abbreviation()
可以为我返回缩写,我可以使用该缩写以稍后的日期格式化,但是我注意到它返回String?
而不是String
。
我已经检查了官方文件,但没有发现API返回可选字符串或可能是失败情况的原因。
我目前用于存储时区的解决方案是let timeZone = TimeZone.current.abbreviation()!
,但我不确定是否可以安全地将其解开。有人知道是否可以安全地强制解开返回的缩写,或者API为什么返回可选价值?谢谢。
尽管没有记录在记录中,但我想说的是,返回值是可选的。因此,它 will 有时只需检查以下内容:
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())
您似乎还想说明这是否是日光保存时间。使用TimeZone
的isDaylightSavingTime
方法检查。您可以在末尾添加像(daylight saving)
这样的字符串。