Как анализировать "дата и время MongoDB (дата ISO)" в NSDate на iOS (swift и objective-c)
Это результат json:
{
"mongodate" : "2015-06-11T14:16:56.643Z"
}
Я также ответил на вопрос.
Как анализировать "дата и время MongoDB (дата ISO)" в NSDate на iOS (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()
}
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
Как и в iOS 10+, теперь существует ISO8601DateFormatter
.
https://developer.apple.com/reference/foundation/iso8601dateformatter
ОДНАКО... он не обрабатывает десятичные секунды, которые вы иногда получаете из строк даты MongoDB, здесь простое обход:
Свифт 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()
}