如何从 Date 对象中提取 TimeZone?

Tru*_*an1 5 timezone datetime swift swift3

我有一个像这样的 ISO-8601 日期字符串:"2017-02-07T00:00:00-08:00"

如何从此日期中提取 TimeZone 对象?

rma*_*ddy 5

不幸的是,DateFormatter没有任何帮助,因为您不需要,Date也不提供有关已解析日期字符串的任何时区信息的任何信息。并且TimeZone没有任何可以解析时区偏移字符串的初始值设定项。

所以你必须自己做这项工作。由于您有固定格式的日期字符串,因此您知道时区偏移量始终是字符串的最后 6 个字符。其中最后 2 个是分钟数,前 3 个是小时数(包括符号)。

从日期字符串中提取这两个子字符串(小时和分钟)。将它们都转换为Int. 然后进行一些简单的数学运算来计算以秒为单位的偏移量(小时 * 3600 + 分钟 * 60)。

一旦您在几秒钟内获得了该偏移量,您就可以TimeZone使用init(secondsFromGMT:)初始值设定项创建一个实例。


chi*_*arm -1

您可以创建一个仅返回时区的日期格式化程序,如下所示。将缩写更改为您要查找的时区。

let timeZoneOnlyDateFormatter: DateFormatter = {
  let formatter = DateFormatter()
  formatter.timeZone = TimeZone(abbreviation: "UTC")
  formatter.dateStyle = .none
  formatter.timeStyle = .none
  return formatter
}()
Run Code Online (Sandbox Code Playgroud)

并使用这些函数将其转换为字符串或将字符串转换为日期。

func formatDateIntoString(date: Date, dateFormatter: DateFormatter) -> String {
  return dateFormatter.string(from: date)
}


func formatStringIntoDate(string: String, dateFormatter: DateFormatter) -> Date! {
  return dateFormatter.date(from: string)
}
Run Code Online (Sandbox Code Playgroud)