Преобразование даты и времени в NSDate из NSString

Часовой пояс всегда создавал мне проблемы. На этот раз мне нужно преобразовать date-time , которое у меня есть в NSSTring, в NSDate.

Я делаю что-то вроде этого.

NSString *myStringDate=@"14-11-2012 4:09:00 PM +0500"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a Z"];

NSDate *aDate = [formatter dateFromString:myStringDate];
NSLog(@"%@",aDate);

но у меня такой вывод

14-11-2012 11:09:00 +0000

Кроме того, нет настройки AM / PM :-(

Я хочу 14-11-2012 4:09:00 PM +0500, то есть ту же дату-время, что и в строке.

Спасибо в ожидании.


person iOmi    schedule 14.11.2012    source источник
comment
также см.: Видеосессии WWDC 2011, Сеанс 117 — Выполнение расчетов календаря   -  person    schedule 14.11.2012


Ответы (3)


результат вашего преобразования дает время по Гринвичу

NSString *myStringDate=@"14-11-2012 4:09:00 PM +0500"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a Z"];

NSDate *aDate = [formatter dateFromString:myStringDate];



 NSDateFormatter* df_utc = [[[NSDateFormatter alloc] init] autorelease];
 [df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
 [df_utc setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];

 NSDateFormatter* df_local = [[[NSDateFormatter alloc] init] autorelease];
 [df_local setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];
 [df_local setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];

 NSString* ts_utc_string = [df_utc stringFromDate:aDate];
 NSString* ts_local_string = [df_local stringFromDate:aDate];
person Omar Freewan    schedule 14.11.2012

Вот это изменение нужно принять.

[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a "];

Спасибо

person Kamar Shad    schedule 14.11.2012

Преобразование выглядит корректно, но выходные данные по умолчанию представлены во времени UTC (+0000) и с 24-часовым форматом времени, поэтому вы не различаете AM/PM («13:00» будет 13:00). Вам также необходимо отформатировать вывод, если вы хотите конкретное представление ([formatter stringFromDate:aDate])…

Для проблемы UTC вам нужно выбрать часовой пояс по вашему выбору, указав этот выбор вместо [NSTimeZone systemTimeZone]. Попробуйте [NSTimeZone localTimeZone] для начала.

person Arkku    schedule 14.11.2012