【问题标题】:Data Format is returning nil for this format "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"对于这种格式“yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ”,数据格式返回 nil
【发布时间】:2020-05-20 07:07:25
【问题描述】:

嗯,我有这个从后端返回的特定原始字符串,它是日期字符串"2020-05-27T23:59:59.000+02:00"

我正在尝试使用以下代码格式化字符串:-

 let passExpiresAtString =  "2020-05-27T23:59:59.000+02:00"
 let df = DateFormatter()
 df.locale = Locale(identifier: "en_US_POSIX")
 df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
 session.passExpiresAt = df.date(from: passExpiresAtString)

所以,如果有人能固定我,我会很高兴我在日期格式设置上做错了什么。

感谢您的帮助。

【问题讨论】:

  • 它适用于我,这意味着您可能必须将格式化程序的语言环境设置为“en_US_POSIX”(比较stackoverflow.com/a/40702569/1187415
  • @MartinR 我使用 locale ` df.locale = Locale(identifier: "en_US_POSIX")` 绑定,似乎它仍然在我的设备上返回 nil。
  • 您是否先分配了区域设置,分配日期格式之前?
  • 是的,我也更新了相关代码。 @MartinR
  • 上面的代码对我有用。您使用的是哪个 swift 版本?

标签: ios swift iphone nsdate nsdateformatter


【解决方案1】:

或者将格式化程序的日历设置为 ISO8601 日历

let passExpiresAtString =  "2020-05-27T23:59:59.000+02:00"
let df = DateFormatter()
df.calendar = Calendar(identifier: .iso8601)
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
session.passExpiresAt = df.date(from: passExpiresAtString)

或者——更可靠——使用ISO8601DateFormatter

let passExpiresAtString =  "2020-05-27T23:59:59.000+02:00"
let df = ISO8601DateFormatter()
df.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
session.passExpiresAt = df.date(from: passExpiresAtString)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2020-08-24
    相关资源
    最近更新 更多