【发布时间】:2018-09-03 14:34:26
【问题描述】:
我想使用参数获取 Date 对象。使用时区缩写和标识符是可能的。但是我们可以得到全名时区字符串吗?
"dateTime": "2017-04-15T12:00:00",
"timeZone": "Pacific Standard Time"
【问题讨论】:
标签: swift date nsdate nsdateformatter nstimezone
我想使用参数获取 Date 对象。使用时区缩写和标识符是可能的。但是我们可以得到全名时区字符串吗?
"dateTime": "2017-04-15T12:00:00",
"timeZone": "Pacific Standard Time"
【问题讨论】:
标签: swift date nsdate nsdateformatter nstimezone
这当然是可能的,但不是很简单。让我们获取所有可能的时区,并将它们的本地化描述与您的描述进行比较:
let dateString = "2017-04-15T12:00:00"
let timeZoneName = "Pacific Standard Time"
let locale = Locale(identifier: "en-US")
let knownTimeZones = TimeZone.knownTimeZoneIdentifiers.flatMap { TimeZone(identifier: $0) }
let timeZone = knownTimeZones.first {
// I don't know what type of name you have, `.standard` does not have to be correct
$0.localizedName(for: .standard, locale: locale) == timeZoneName
}
print(timeZone)
if let timeZone = timeZone {
let dateFormatter = DateFormatter()
dateFormatter.locale = locale
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = timeZone
print(dateFormatter.date(from: dateString))
}
【讨论】:
Date 时,它会以 UTC (GMT-0) 时区打印。日期本身是一个时间点,它没有时区。如果要在指定的时区显示它,则需要使用该时区创建一个格式化程序并使用它来创建该日期的字符串表示形式。