如何在 iOS 上将“MongoDB 日期时间(ISO 日期)”解析为 NSDate(swift 和 Objective-c)

Posted

技术标签:

【中文标题】如何在 iOS 上将“MongoDB 日期时间(ISO 日期)”解析为 NSDate(swift 和 Objective-c)【英文标题】:How to parse "MongoDB datetime (ISO Date)" to NSDate on iOS (swift and objective-c) 【发布时间】:2015-06-12 09:19:44 【问题描述】:

如何在 ios 上将“MongoDB datetime (ISO Date)”解析为 NSDate(swift 和 Objective-c)

这是 json 结果:


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

我也回答了这个问题。

【问题讨论】:

【参考方案1】:

斯威夫特

  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()

Objective-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

【讨论】:

【参考方案2】:

@fatihyildizhan 回答的 Swift 3 更新:

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()

【讨论】:

【参考方案3】:

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

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

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

ISO8601DateFormatter doesn't parse ISO date string

【讨论】:

以上是关于如何在 iOS 上将“MongoDB 日期时间(ISO 日期)”解析为 NSDate(swift 和 Objective-c)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 上将文本转换为图像?

如何在 iOS 上将所有 onClick 事件更改为 TouchStart?

如何在 iOS 模拟器上将应用程序启动到后台?

如何在 iOS 7 上将状态栏内容颜色设置为白色

如何在 iOS 6 上将多个 URL 共享到 Facebook

如何在真实设备上将Gradient应用于iOS 10中的UIView