iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?

Posted

技术标签:

【中文标题】iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?【英文标题】:iOS Swift: how to convert specific date string format to Date object, when string contains time zone abbreviation? 【发布时间】:2018-03-09 13:51:36 【问题描述】:

我从服务器获取格式为“2018 年 3 月 8 日 16:00:00 PST”的日期字符串月份和日期之间有很多空格

我的目的是基本上删除那些额外的空格。我的想法是——我会将字符串转换为 Date 对象,然后再转换回字符串。

如何使用 Date Formatter 将其转换为 Date 对象,同时考虑时区。

我担心这里的“PST”。在将日期转换为字符串时,我需要格式 - “2018 年 3 月 8 日 16:00:00 PST”,即 PST(或任何进入的时区)应在最终字符串中保持不变。

【问题讨论】:

Swift convert string to date的可能重复 【参考方案1】:
extension String 
    func getDate(fromFormat format: String = "MMMM dd, yyyy HH:mm:ss zzz") -> Date? 
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = format
      dateFormatter.locale =  Locale(identifier: "en_US_POSIX")
      return dateFormatter.date(from: self)
  



let myDateString = "March 08, 2018 16:00:00 PST"
myDateString.getDate()

您也可以使用其他时间格式调用。

【讨论】:

请将语言环境设置为 POSIX。任何解析都必须这样做。例如,March 取决于区域设置。 HH 可以被DateFormatter 覆盖为hh,年份可以使用非公历解析,如果不这样做,PST 可以解释为Philippine Standard Time @Sulthan,你能发帖回答吗? 嘿@Mansi,不设置时区或区域设置,它返回“2018 年 3 月 9 日 05:30:00 GMT+5:30” @RashmiRanjanmallick 这可能是正确的。如果您的设备语言未设置为英语或您不使用公历(例如,如果您是中国人),则会出现问题。 @RashmiRanjanmallick 这是一个完全不同的问题。您需要将格式化程序设置为PST 时区并将给定的Date 格式化为String。确保您了解Date(一个时间点,没有时区)和相对于时区的日期字符串表示之间的区别。【参考方案2】:

试试这个

    let isoDate = "March 08, 2018 16:00:00 PST"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMMM dd, yyyy HH:mm:ss z"
    let date = dateFormatter.date(from: isoDate)!

【讨论】:

一方面,您必须将语言环境设置为 POSIX。如果您不这样做,解析将无法正常工作。另外,请在 Swift 中使用DateFormatter,而不是NSDateFormatterZ 也必须是小写的 z 哦,对不起,基本上我曾经在目标 C 中编码,所以得到了那个错误。我已经更新了答案谢谢【参考方案3】:

试试这个

class  func stringToDate (dateString:String, dateFormat:String) -> Date? 
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    let dateFromString = dateFormatter.date(from: dateString)
    return dateFromString

【讨论】:

这与上面的答案相同。它如何处理“PST”部分? 检查一下,希望这有效 - How can I convert including timezone date in swift?

以上是关于iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:将 UTC NSDate 转换为本地时区

如何使用 date-fns-tz 检测时区缩写?

当基本字符串包含双引号时,仅针对 Swift 中 UILabel 的特定范围的点击手势不起作用

Swift - 从 ISO8601 日期字符串中检索时区

iOS - 如何获取时区的原始偏移量?

Swift UI:当视图中显示空列表时,如何显示错误消息?