【问题标题】:How to parse this datetime in Swift如何在 Swift 中解析这个日期时间
【发布时间】:2019-11-07 14:55:21
【问题描述】:

我正在尝试解析此 DateTime,但无法检测到格式并且解析失败。如下所示:

20190507T000000.000

我尝试了所有我能想象到的格式,但老实说,我对日期格式的理解还很遥远。我尝试将此格式设置为 dateFormatter,因为我认为这最接近它:

"yyyyMMddTHHmmss.sss"

另外,我尝试使用ISO8601DateFormatter(),但它什么也没给我。我猜这个 DateTime 是某个 UTC 日期。

【问题讨论】:

  • 参考这里了解不同的日期格式:maddysoft.com/articles/dates.html
  • 你很接近。你需要"yyyyMMdd'T'HHmmss.SSS"。请注意,T 需要转义,因为它是文字,而不是格式说明符,并且小数秒使用 S,而不是 s
  • @rmaddy 请将您的评论转换为完整答案,以便我将其标记为正确答案。

标签: ios swift nsdateformatter utc iso8601


【解决方案1】:

创建了一个字符串的扩展。

extension String {

extension String {

public func dateIn(formate: String) -> Date? { // gives in same formate
    if formate.isEmpty { return Date() }
    
    let formatter = DateFormatter()
    formatter.timeZone = TimeZone.current
    formatter.dateFormat = formate
    if let dt = formatter.date(from: self) {
        return dt
    }
    return nil
}

}

如何使用:

let stringValue : String = "20190507T000000.000"
print(stringValue.dateIn(formate: "yyyyMMdd'T'HHmmss.SSS"))

【讨论】:

  • 你为什么扩展String?为什么失败时返回Date()
  • 因为20190507T000000.000是字符串类型,
  • 我测试了你的代码,它返回 nil。您需要转义 T:"yyyyMMdd'T'HHmmss.sss"
  • .sss 需要为.SSST 需要转义为'T'
  • 最后一个建议。你的回答都不是必需的。 OP 只需要知道他们几乎正确的日期格式出了什么问题。您的回答实际上并没有试图解释 OP 出了什么问题。在您按照我的建议修复日期格式之前,您的回答从未真正解决过问题。为了使您的答案真正正确,请解释 OP 出了什么问题。您添加的所有代码只是回答问题所不需要的额外内容。
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2020-11-06
相关资源
最近更新 更多