如何在iOS上将"MongoDB datetime (ISO Date)"解析为NSDate(swift和objective-c)



如何在iOS上将"MongoDB datetime(ISO Date)"解析为NSDate(swift和objective-c)

这是 json 结果:

{
    "mongodate" : "2015-06-11T14:16:56.643Z"
}

我也回答了这个问题。

Swift

  func stringToDate(date:String) -> NSDate {
  let formatter = NSDateFormatter()
  // Format 1
  formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
  if let parsedDate = formatter.dateFromString(date) {
    return parsedDate
  }
  // Format 2
  formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:SSSZ"
  if let parsedDate = formatter.dateFromString(date) {
    return parsedDate
  }
  // Couldn't parsed with any format. Just get the date
  let splitedDate = date.componentsSeparatedByString("T")
  if splitedDate.count > 0 {
    formatter.dateFormat = "yyyy-MM-dd"
    if let parsedDate = formatter.dateFromString(splitedDate[0]) {
      return parsedDate
    }
  }
  // Nothing worked!
  return NSDate().toLocalTime()
}

目标-C

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSDate *date = [dateFormat dateFromString:@"2015-06-11T14:16:56.643Z"];

格式:

// Format 1, 12Hour Style
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2016-02-12T10:01:31.000+0000
// Format 2, 24Hour Style
"yyyy-MM-dd'T'HH:mm:SSSZ"
2016-02-12T10:01:31Z

Swift 3 更新了@fatihyildizhan的答案:

func stringToDate(date: String) -> Date {
    let formatter = DateFormatter()
    // Format 1
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    if let parsedDate = formatter.date(from: date) {
        return parsedDate
    }
    // Format 2
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:SSSZ"
    if let parsedDate = formatter.date(from: date) {
        return parsedDate
    }
    // Couldn't parsed with any format. Just get the date
    let splitedDate = date.components(separatedBy: "T")
    if splitedDate.count > 0 {
        formatter.dateFormat = "yyyy-MM-dd"
        if let parsedDate = formatter.date(from: splitedDate[0]) {
            return parsedDate
        }
    }
    // Nothing worked!
    return Date()
}

从iOS 10+开始,现在有一个ISO8601DateFormatter

https://developer.apple.com/reference/foundation/iso8601dateformatter

然而。。。它不处理您有时从MongoDB日期字符串中获得的小数秒,这是一个简单的解决方法:

ISO8601日期格式化程序不分析 ISO 日期字符串

最新更新