我正在寻找一种将本地时区保存到属性中的方法,以便在稍后需要在UI中显示格式化日期时使用它来格式化日期。
我发现TimeZone.current.abbreviation()可以为我返回缩写,我可以在稍后使用该缩写来格式化日期,但我注意到它返回的是String?而不是String。
我检查了正式文件,但是没有发现为什么该API返回一个可选的字符串,或者什么可能是失败的情况。
我目前用于存储时区的解决方案是let timeZone = TimeZone.current.abbreviation()!,但我不确定强制展开它是否安全。是否有人知道强制拆解返回的缩写是否安全,或者为什么API返回一个可选的值?谢谢。
发布于 2018-03-29 05:51:58
虽然这还没有文档化,但我想说,返回值是可选的肯定是有原因的。因此,它有时会失败,只需检查可选选项如下:
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方法TimeZone进行检查。您可以在末尾添加一个类似于(daylight saving)的字符串。
https://stackoverflow.com/questions/49548638
复制相似问题