【发布时间】:2019-11-05 18:54:34
【问题描述】:
我通过存储日期组件字典在后端存储用户出生日期。它看起来像这样:
{
"day": 1,
"month": 1,
"year": 1970,
"timeZone": "GMT"
}
为了存储这个对象,它从用户输入中获取用户的生日、月份和年份。但是,用户时区是通过TimeZone.current.abbreviation() 收集的。
现在,我后端的一些用户生日对象的"timeZone" 格式为"CST"、"BST" 或"PDT"。以这种方式格式化的"timeZone"s 分别通过let timeZone = TimeZone(abbreviation: "CST")!、let timeZone = TimeZone(abbreviation: "BST")! 或let timeZone = TimeZone(abbreviation: "PDT")! 在前端成功初始化TimeZone。
问题是,我后端的其他用户生日对象的"timeZone" 格式为"GMT+8"。当尝试通过let timeZone = TimeZone(abbreviation: "GMT+8")! 初始化像这样格式化的"timeZone"s 时,初始化返回nil。我也试过let timeZone = TimeZone(identifier: "GMT+8")!,但这也返回nil。
当TimeZone 的格式是相对于其与 GMT 的偏移量而不是其唯一的缩写时,有没有办法初始化它?我见过TimeZone 初始化程序是TimeZone(secondsFromGMT: Int)。我可以简单地从"GMT+8" 中取出8 并乘以3600(一小时的秒数)并将这个结果传递给TimeZone(secondsFromGMT: Int)?
【问题讨论】:
-
避免使用时区缩写。它们不是唯一的,也不是每个时区都有一个有用的缩写。使用时区标识符或偏移量。
-
扩展 rmaddy 的评论 - “CST”可能是“Central Standard Time”,也可能是“China Standard Time”或“Cuba Standard Time”。 “BST”可能是“英国夏令时间”,也可能是“孟加拉国标准时间”或“布干维尔标准时间”。
-
@DavidChopin 酷。精确没有错! :)
-
@DavidChopin 是的,如果没有太多麻烦,最好发布一个有效的答案 - 可能会帮助处于类似情况的其他人。
-
我继续发布了一些内容,以防将来对某人有所帮助。
标签: ios swift timezone nstimezone