如何在 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 上将所有 onClick 事件更改为 TouchStart?