2015-05-20 9 views
2

Используя JSON, я вытаскиваю дату из моей базы данных, которая отформатирована как Y-m-d в php. Например. 2015-05-27.Преобразование даты mysql в NSDate

Я сохранил дату в swift и вижу ее отформатированную, когда я печатаю строку таким же образом. Я следил за другими ответами и учебниками, чтобы попытаться преобразовать дату в dd-MM-yyyy, но каждый раз, когда я возвращаюсь «nil».

Если я пытаюсь преобразовать дату в YYYY-MM-DD я получаю '2015-05-26 23:00:00 +0000'

Мой код:

var survey_date = prefs.valueForKey("SURVEY_DATE") as! String 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "dd-MM-yyyy" 
var date = dateFormatter.dateFromString(survey_date) as NSDate! 

println(date) 

self.survey_date.text = "Your survey is scheduled for \(date)" 

ответ

1

Вы установили свойство dateFormat даты formatter dd-MM-yyyy, но строка в survey_date отформатирована как yyyy-MM-dd. В результате, значение даты в этой строке ...

var date = dateFormatter.dateFromString(survey_date) as NSDate! 

является nil. Это легко исправить - измените dateFormat на yyyy-MM-dd.

Распечатка NSDate в формате yyyy-MM-dd также является простым исправлением. Так же, как вы использовали NSDateFormatter «s dateFromString() метод для преобразования строки, формат которого определяется его свойством dateFormat в NSDate, используйте NSDateFormatter» stringFromDate() метод s для преобразования NSDate в строку с форматом dateFormat «s.

Вот код, с этими двумя исправлениями применяются:

var survey_date = prefs.valueForKey("SURVEY_DATE") as! String 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd" 
var date = dateFormatter.dateFromString(survey_date) as NSDate! 
let outputDate = dateFormatter.stringFromDate(date) 

println(outputDate) 

self.survey_date.text = "Your survey is scheduled for \(outputDate)" 
0

Чтение другие ответы на данном сайте, кажется, что Swift не имеет собственный объект Date, но вместо этого можно использовать какао NSDate объект:

var date = Date.parse("2014-05-20") 

Второй параметр является формат, который по умолчанию yyyy-MM-dd (это и есть даты MySQL).

Полагаю, что если у вас есть объект NSDate, вы сможете распечатать его в выбранном вами формате.

+0

Моя проблема заключается в получении вар survey_date = prefs.valueForKey ("SURVEY_DATE"), как! String для преобразования в NSDate – tomantford

+0

Если вы посмотрите выше, первый параметр 'Date.parse' - это строка, поэтому введите дату MySQL в строку и затем передайте ее в метод' parse'. –

+0

Дата - это неразрешенный идентификатор – tomantford

1

Ваш код с использованием форматирования даты корректен и работает корректно.

Дата создания по умолчанию для текущего часового пояса пользователя, поэтому дата, которую вы вводите как «2015-05-27», будет считаться полночь (я думаю) в этот день в вашем местном часовом поясе.

Println отображает дату в UTC, поэтому вы видите вывод в формате UTC. Очевидно, вы находитесь в UTC + 1, поэтому дата появляется как 11:00 вечера накануне.

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

Смежные вопросы