NSDate с часовым поясом

Мне нужно получить NSDate с часовым поясом @"UTC".

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"MM/dd/yyyy HH:mm:ss aaa";;
NSTimeZone *timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[dateFormatter setTimeZone:timeZone];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"time stamp %@", dateString);
NSLog(@"NSDate %@", [dateFormatter dateFromString:dateString]);

Выходная консоль печатает другую дату:

отметка времени 01.07.2014 06:12:54

NSDate 01.07.2014 00:12:54 +0000

Мой вопрос в том, почему два времени различаются, даже если используется один и тот же часовой пояс:


person jailani    schedule 01.07.2014    source источник
comment
см. эти сообщения stackoverflow.com/questions/11273001/, stackoverflow.com/ вопросы/7485493/   -  person Mani    schedule 01.07.2014
comment
интересный. Я тестировал, не ставя часовой пояс, все равно другой. но моя теория состоит в том, что NSDate напечатано с использованием +0000 по Гринвичу, следовательно, напечатано NSString с использованием текущего формата / часового пояса.   -  person HelmiB    schedule 01.07.2014
comment
Я думаю, вы путаете, что такое NSDate. NSDate представляет собой абсолютный момент времени и не связан ни с каким часовым поясом. Описание NSDate (которое представляет собой строковое представление, которое вы регистрируете) является довольно произвольным и ненадежным для разных версий ОС. Ссылки, предоставленные в первом ответе, более подробно раскрывают этот вопрос. В двух словах: если вам нужны удобочитаемые даты, используйте NSDateFormatter; если вы хотите выполнить вычисления абсолютного времени, используйте NSDate   -  person spassas    schedule 01.07.2014