iOS Swift 3: преобразовать строку формата "yyyy-MM-dd'T'HH: mm: ssZ" на сегодняшний день

Привет, у меня есть словарь

self.publishedAt = dictionary["publishedAt"] as? NSString 

в котором я получаю дату « 2017-01-27T18: 36: 36Z ». Я хочу преобразовать его в читаемом формате: dd-MM-yyyy hh: mm: ss . я пробовал через

 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy hh:mm:ss" let date = dateFormatter.date(from: (self.publishedAt as? String)!) print("EXACT_DATE : \(date)") 

Но ноль. 🙁

Каков правильный способ получить дату в простом формате?

2 Solutions collect form web for “iOS Swift 3: преобразовать строку формата "yyyy-MM-dd'T'HH: mm: ssZ" на сегодняшний день”

Вам нужен формат ввода для преобразования строки ISO8601 в дату и выходной формат для преобразования даты в строку:

 let string = "2017-01-27T18:36:36Z" let dateFormatter = DateFormatter() let tempLocale = dateFormatter.locale // save locale temporarily dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" let date = dateFormatter.date(from: string)! dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss" dateFormatter.locale = tempLocale // reset the locale let dateString = dateFormatter.string(from: date) print("EXACT_DATE : \(dateString)") 

Чтобы преобразовать строку в объект Date :

 let string = "2017-01-27T18:36:36Z" let isoFormatter = ISO8601DateFormatter() let date = isoFormatter.date(from: string)! 

Или, если вам нужно поддерживать версии iOS, которые предшествуют ISO8601DateFormatter :

 let isoFormatter = DateFormatter() isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" isoFormatter.locale = Locale(identifier: "en_US_POSIX") let date = isoFormatter.date(from: string)! 

(Чтобы понять, почему мы устанавливаем locale для форматирования даты ISO 8601, см. Технические вопросы и технические характеристики Apple 1480 ).

Затем, чтобы преобразовать это в удобный формат даты, вы должны использовать отдельный форматтер (или использовать второй пример выше, вы можете повторно использовать форматтер, но не забудьте вернуть locale обратно в Locale.current ):

 let formatter = DateFormatter() formatter.dateStyle = .short formatter.timeStyle = .medium let result = formatter.string(from:date) 

Обратите внимание, что я предлагаю использовать эти параметры стиля при представлении даты для пользователя, а не в строке dateFormat , поэтому он использует стили, соответствующие их языку, вместо того, чтобы предполагать, что они хотят 24 часа или нет, и / или используют ли они dd-MM-yyyy против формата MM-dd-yyyy .


Обратите внимание, что изменение форматов форматирования даты (например, изменение строки dateFormat ) является относительно дорогостоящим процессом, поэтому, если вы выполняете этот процесс для нескольких дат, не принимайте ни одного параметра DateFormatter и постоянно меняйте свой dateFormat или стилей назад и вперед (или, что еще хуже, создавать новые форматы для каждой даты). Вместо этого создайте один форматтера для стиля формата даты и максимально используйте его грамматику.

  • Какой тип имеет диапазон для цикла?
  • Swift @IBИнспективные свойства в структуре, не отображаемой в Interface Builder
  • OAuth Swift: Какой URL-адрес обратного вызова для приложения Dribbble?
  • UIBarButtonItem изменение изображения для кнопки Play / Pause (SWIFT)
  • Глобальная переменная в Appdelegate in swift
  • Обрезать изображение снизу программно
  • Добавить жест в SKShapeNode в WatchOS3
  • Синтаксическая ошибка Swift 2.2: не может вызывать значение нефункционного типа «UITableView!»
  • IBAction, вызываемый в ответ на взаимодействие кода с элементом пользовательского интерфейса
  • Настройка содержимого (изображений) на SCNCylinder отменяется (переворачивается)
  • Изменение размеров ячеек, чтобы они соответствовали меткам, задало размер изображения, а ярлык имеет несколько закругленных углов
  • Interesting Posts

    Учебник для iPhone OpenCV по распознаванию формы

    Как преобразовать UIImage в J2K (JPEG2000) в iOS?

    Неопределенные символы для архитектуры i386, для iOS?

    Можно ли делиться глубокими ссылками с iPhone Simulator?

    Ошибка Apple LLVM 6.0: ошибка clang с кодом завершения -1

    Проведите конфликт между ячейкой и горизонтальной прокруткой

    Как сделать UITableView Header доступным?

    Согласование вертикальных позиций MPVolumeView и UISlider в UIToolBar

    Назначение nil элементу в NSMutableDictionary в Objective-C удаляет этот элемент, является ли это санкционированной функцией или ошибкой?

    Как установить аннотацию в PDF-документ, который отображается для всех PDF-считывателей не только для конкретного приложения

    Почему я не могу инициализировать статическую переменную, вызывая статическую функцию в Swift?

    iOS: прозрачный текст для отображения фона через текст

    Шифрование файловой системы для IOS?

    Компас iPhone представляет неправильный угол тангажа заголовка> около 45 °

    Цель-c: Как обновить объект в NSMutableArray?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.