Swift4 - 强制解开使用 TimeZone.current.abbreviation() 返回的缩写是否安全?

标签 swift timezone swift4

我正在寻找一种将本地时区保存到属性中的方法,以便稍后当我需要在 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())

您似乎还想显示是否是夏令时。使用TimeZoneisDaylightSavingTime方法来检查。您只需在末尾添加一个类似 (夏令时) 的字符串即可。

关于Swift4 - 强制解开使用 TimeZone.current.abbreviation() 返回的缩写是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49548638/

相关文章:

使用 `ReferenceWritableKeyPath ` 的 Swift 编译器段错误

xcode - Xcode Symbol Navigator 中的重复类

swift - 闭包不更新局部变量

ios - RealmSwift 查询中带有内部对象引用的谓词问题

c# - 如何在 Windows 和 IANA 时区之间进行转换?

php - MySQL now() 更改时区

ios - 在窗口前添加一个 ViewController!.UITabBarController Swift 4 类型的 rootViewController

Swift websockets 不接受客户端证书

ios - 如何为 iOS UIButton 对象实现此 UI/UX 设计

python - SQLAlchemy DateTime 时区