Как разобрать «MongoDB datetime (ISO Date)» в NSDate на iOS (swift и target-c)

Как разобрать "MongoDB datetime (ISO Date)" в NSDate на iOS (swift и target-c)

Это результат json:

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

Я также ответил на вопрос.

12 голосов | спросил fatihyildizhan 12 J0000006Europe/Moscow 2015, 12:19:44

3 ответа


0

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
ответил fatihyildizhan 12 J0000006Europe/Moscow 2015, 12:19:44
0

Начиная с iOS 10+, теперь есть ISO8601DateFormatter.

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

ОДНАКО ... он не обрабатывает десятичные секунды, которые вы иногда получаете из строк дат MongoDB, вот простой обходной путь:

ISO8601DateFormatter не анализирует строку даты ISO

ответил Greg Anderson 12 Maypm17 2017, 17:20:10
0

Обновление 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()
}
ответил user3344977 28 FebruaryEurope/MoscowbTue, 28 Feb 2017 03:31:43 +0300000000amTue, 28 Feb 2017 03:31:43 +030017 2017, 03:31:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132