我正在寻找一种将本地时区保存到属性中的方法,以便稍后当我需要在 UI 中显示格式化日期时可以使用它来格式化日期。
我发现 TimeZone.current.abbreviation()
可以为我返回缩写,我可以稍后使用该缩写来格式化日期,但我注意到它返回 String ?
而不是字符串
。
我检查了official document但没有发现该 API 返回可选字符串的原因或可能的失败情况。
我当前存储时区的解决方案是 let timeZone = TimeZone.current.abbreviation()!
但我不确定强制解开它是否安全。有谁知道强制解开返回的缩写是否安全或者为什么 API 返回可选值?谢谢。
最佳答案
虽然这没有记录,但我想说,返回值是可选的肯定有一个原因。所以它有时会失败只需用这个检查可选:
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
方法来检查。您只需在末尾添加一个类似 (夏令时)
的字符串即可。
关于Swift4 - 强制解开使用 TimeZone.current.abbreviation() 返回的缩写是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49548638/