Мне нужно получить 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
Мой вопрос в том, почему два времени различаются, даже если используется один и тот же часовой пояс:
NSDate
напечатано с использованием +0000 по Гринвичу, следовательно, напечатаноNSString
с использованием текущего формата / часового пояса. - person HelmiB   schedule 01.07.2014NSDate
.NSDate
представляет собой абсолютный момент времени и не связан ни с каким часовым поясом. ОписаниеNSDate
(которое представляет собой строковое представление, которое вы регистрируете) является довольно произвольным и ненадежным для разных версий ОС. Ссылки, предоставленные в первом ответе, более подробно раскрывают этот вопрос. В двух словах: если вам нужны удобочитаемые даты, используйтеNSDateFormatter
; если вы хотите выполнить вычисления абсолютного времени, используйтеNSDate
- person spassas   schedule 01.07.2014