【问题标题】:Formatting date with Swift使用 Swift 格式化日期
【发布时间】:2015-07-29 03:52:52
【问题描述】:

我正在尝试使用 Date Formatter 将字符串转换为日期。

var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd’T’HH:mm:ss’Z’"
var AvailabletoDateTime = dateFormatter.dateFromString("2015-07-16’T’08:00:00’Z’")

但 AvailabletoDateTime 正在返回 nil 。 有人可以帮助我,如果我想念这里的任何东西,请告诉我。

【问题讨论】:

    标签: swift nsdateformatter


    【解决方案1】:

    您似乎正在尝试使用 ISO 8601/RFC 3339 日期。通常日期字符串包含任何引号。它将是:类似于2015-07-16T08:00:00Z。仅供参考,Z 代表 GMT/UTC 时区(与您当地的时区相反)。

    所以,在 Swift 3 中:

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
    dateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
    let availabletoDateTime = dateFormatter.date(from: "2015-07-16T08:00:00Z")
    

    注意,我 (a) 在格式字符串中使用 ZZZZZ 而不是 Z; (b) 显式设置timeZone。我这样做是因为我的格式化程序不仅可以成功地将字符串2015-07-16T08:00:00Z 解析为Date 对象,而且它还可以用于另一个方向,将Date 对象转换为格式为@ 的字符串987654332@。

    还要注意我使用的是' 字符,而不是 字符。我也不需要设置calendar,因为en_US_POSIXlocale 就是你所需要的。

    有关详细信息,请参阅Technical Q&A 1480


    不,现在你会使用新的ISO8601DateFormatter

    let dateFormatter = ISO8601DateFormatter()
    let availabletoDateTime = dateFormatter.date(from: "2015-07-16T08:00:00Z")
    

    在 Swift 3 中,如果可以,请使用此 ISO8601DateFormatter,但要认识到它不能提供太多控制(例如,在 iOS 11 之前,您无法指定毫秒)。但在这种情况下,这就足够了。

    对于 Swift 2 版本,请参阅 previous revision of this answer

    【讨论】:

      【解决方案2】:

      试试这样:

      let dateFormatter = NSDateFormatter()
      dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
      dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
      dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
      let availabletoDateTime = dateFormatter.dateFromString("2015-07-16T08:00:00Z")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-03
        • 2015-04-29
        • 1970-01-01
        • 2021-03-15
        • 2013-04-06
        • 2012-05-05
        • 2015-09-29
        • 2018-05-26
        相关资源
        最近更新 更多