2014-09-24 1 views
0

Я следующий день в строке формиат «Дата строки: 2014-09-28 17:30:00»Не получать NSDate из строки

Теперь я хочу, чтобы преобразовать его в NSDate.

У меня есть следующий код для этого.

NSString *date = @"2014-09-28 17:30:00"; 
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

NSDate *dateFromString = [[NSDate alloc] init]; 
dateFromString = [dateFormatter1 dateFromString:date]; 
NSLog(@"date from string: %@", dateFromString); 

У меня есть следующий выход.

date from string: 2014-09-28 12:00:00 +0000 

Итак, здесь Время изменено.

Скажите, пожалуйста, как я могу конвертировать в NSDate. Что мне здесь не хватает?

+0

У вас нет проблемы с вашей датой. Это верно. Поскольку 17:30 в IST аналогично 12:00 в GMT –

+0

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

+0

Обратите внимание, что alloc/init 'NSDate' бесполезен. – Larme

ответ

0

Существует компонент часового пояса прикреплен к журн в конце, что означает дату превращали в указанное время zone..here greenwhich среднее время

Так преобразования в вашей временной локализации может дать вам правильное значение вы вставили

в вашей первой строке добавить +0000 до конца и проверьте еще раз вы можете увидеть значение равно вы get.ie преобразование выполняется в формате GMT ​​

+0

Это «Гринвич» :) – Droppy

1

При передаче объекта в NSDateNSLog, он напечатает NSDate в GMT, что может быть не вашим часовым поясом (и почему вы получали 12:00 вместо 17:30), это также приведет к тому, что вывод вашего NSLog заявления будет отличаться для людей, которые запускают ваш код в разных часовых поясах, так что вы хотите сделать, это вызвать метод [NSDateFormatter stringFromDate:], если вы хотите сохранить указанное время с вашей даты объекта:

так замените эту строку кода:

// Will print out GMT time by default (+0000) 
NSLog(@"date from string: %@", dateFromString); 

с этой линией:

// Will honor the timezone of your original NSDate object: 
NSLog(@"date from string: %@", [dateFormatter1 stringFromDate:dateFromString]); 

И это должно печатать из которого вы надеялись.

// -------------------------- //

Примечание: Важно понимать, что NSDate объекты do имеют любую концепцию часовых поясов, поэтому разработчик может управлять и отслеживать свои часовые пояса с помощью предоставленных методов платформы.

КСН, вы можете посмотреть в использовании этого класса:

NSTimeZone, который может помочь вам управлять/назначить часовой пояс (ы) на IOS платформах.

Если вы разрабатываете OSX, вы можете назначить часовой пояс и локаль с помощью этого метода: -descriptionWithCalendarFormat:timeZone:locale:. (К сожалению, этот метод является только OSX)

Надеюсь, что это поможет.

+0

Можете ли вы предоставить ссылку на 'descriptionWithCalendarFormat: timeZone: locale', пожалуйста? Я не вижу этого в ссылке на класс. – Droppy

+0

@ Droppy Я обновил свой ответ ссылкой на ссылку Apple Class для описания descriptionWithCalendarFormat: timeZone: locale'. Имя метода теперь является кликабельной ссылкой. – radiovisual

+0

Спасибо, однако это ссылка на класс OSX, а не на ссылку класса iOS. В версии iOS есть 'descriptionWithLocale:'. Возможно, указанный вами метод доступен через расширение Apple. – Droppy

0

визит https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

Эта документация дает вам, как конвертировать NSString на сегодняшний день.

этот код предоставлен документацией по яблоку.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000]; 

NSString *formattedDateString = [dateFormatter stringFromDate:date]; 
NSLog(@"formattedDateString: %@", formattedDateString); 
// Output for locale en_US: "formattedDateString: Jan 2, 2001". 

Чтобы сделать строку как дату

stringFromDate: Возвращает строковое представление заданной даты, отформатированный с использованием текущих настроек ресивера.

что вы использовали dateFromString: Возвращает представление даты данной строки, интерпретируемое с использованием текущих настроек приемника.