swift – Преобразование строки в дату, а затем в строку в другом формате

Предположим, что у меня есть простая строка, извлеченная из массива строк (представляющих даты) –

var myDateString = "2015-11-25 04:31:32.0" 

Теперь я хочу преобразовать его в строку, которая выглядит как 25 ноября 2015 года .

Для этого я предполагаю, что мне нужно –

  • получить объект даты NSDate из строки, используя NSDateFormatter
  • получить строку из этого объекта NSDate, используя некоторую функциональность (которую я не смог найти)

Я пробовал это на Playground, но не смог решить такую ​​простую проблему.

Вот что я пробовал –

 Line 1| var dateFormatter = NSDateFormatter() Line 2| dateFormatter.locale = NSLocale.currentLocale() Line 3| dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss.A" Line 4| let somedate = dateFormatter.dateFromString(str) Line 5| let somedateString = dateFormatter.stringFromDate(somedate!) 

На боковой панели Xcode строка 4 печатает "Nov 25, 2015, 12:00 AM" , но когда я пытаюсь напечатать строку из somedate , я получаю "2015-11-25 00:00:00.0" .

Я нигде не нашел ни одного правильного объяснения NSDates.

Это было намного проще в Java с функциями parse() и format() для Dates.

Обновлено для Swift 3.0

Вам нужны два форматирования даты: один, чтобы понять вашу входную строку и преобразовать в NSDate, а другой форматтер для создания выходной строки

  let myDateString = "2016-01-01 04:31:32.0" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.A" let myDate = dateFormatter.date(from: myDateString)! dateFormatter.dateFormat = "MMM dd, YYYY" let somedateString = dateFormatter.string(from: myDate) 

Я обновил этот ответ, чтобы изменить формат даты от YYYY до yyyy. В большинстве случаев между ними не будет никакой разницы, но YYYY может рассматривать первые несколько дней в году как часть последней полной недели предыдущего года.

Руководство разработчика Apple объясняет это следующим образом.

Общей ошибкой является использование ГГГГ. yyyy указывает календарный год, тогда как YYYY указывает год («Неделя года»), используемый в календарном году ISO год. В большинстве случаев yyyy и YYYY дают одинаковое число, однако они могут быть разными. Как правило, вы должны использовать календарный год.

Вам потребуются два форматирования даты, как и другие. Кроме того, одна из ваших проблем заключается в том, что вы используете .A вместо .S для дробных секунд. (См. Ссылку на спецификацию формата даты Unicode, как указано в комментарии @ MartinR)

.A – миллисекунды в день

.S – Дробный второй

На игровой площадке:

 let dateString = "2015-11-25 04:01:32.0" let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.S" // Note: S is fractional second let dateFromString = dateFormatter.dateFromString(dateString) // "Nov 25, 2015, 4:31 AM" as NSDate let dateFormatter2 = NSDateFormatter() dateFormatter2.dateFormat = "MMM d, yyyy" let stringFromDate = dateFormatter2.stringFromDate(dateFromString!) // "Nov 25, 2015" as String 
  • как сделать интерактивную ссылку в контроллере предупреждения быстрым
  • Использование команды «po» в Xcode 6 beta 5 Отладка выбранных представлений
  • drawRect с закругленными углами
  • Загрузка нескольких изображений с помощью других параметров в Swift
  • Как вызвать reload table view после того, как вы вызываете функцию rejectViewController в swift?
  • Отображение изображения и текста в кнопке
  • UILabel в UITableHeaderView autoLayout не работает для iPhone 6
  • Что такое lldb_expr в Swift Playground?
  • Отключить подкачку UIPageViewController - Swift
  • UISearchController - панель поиска должна быть видимой всегда
  • Swift - ошибка, связанная со странным кодом
  • Interesting Posts

    Как правильно реализовать didReceiveWriteRequests? iOS6 CoreBluetooth

    Как я могу заставить UIAlertView отображать полное сообщение без прокрутки в ландшафтном режиме?

    Как получить анимированный маршрут полилинии в GMSMapView, чтобы он перемещался вместе с картой при перемещении карты?

    Передавать данные между двумя приложениями по схеме URL в swift?

    Устранение отклоненияПросмотрСообщение: завершение: имеет пару секунд задержки

    XEP – 0055 с iOS и ejabberd?

    NSDate, но не NSTime, как преобразовать строковое представление времени (без даты)

    Библиотека сопоставления объектов из JSON в NSObjects

    Autolayout меняет содержимое содержимого UIScrollView на ротацию

    Ошибка сборки RestKit и AFNetworking

    Не удалось создать родительский каталог для itmtransporter

    Добавление UIActivityIndicator в UITableView

    Ускорение структуры FFT vDSPztoc разделить вещественную форму на разделить вещественный вектор

    Не удалось разобрать приложение iOS Banking

    Как показать и / или скрыть подзаголовок с помощью swift

    Давайте будем гением компьютера.