NSLog
дат не является хорошим способом отображения дат с часовыми поясами, вместо этого используйте NSDateFormatter
, чтобы получить строку для желаемого часового пояса.
NSDate
основано на UTC, единственное истинное время, которое может корректно отображаться для любого часового пояса с помощью NSDateFormatter
.
Из Apple NSDate
документы:
Для анализа строк, содержащих даты, и для генерации строки
представления даты, вы должны использовать экземпляр
NSDateFormatter с использованием методов dateFromString: и stringFromDate:
соответственно - см. «Форматировщики даты» для получения более подробной информации.
Пример кода:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [df dateFromString:@"2012-01-31 01:32:30"];
NSLog(@"The date from string: %@", date);
NSString *stringFromDate = [df stringFromDate:date];
NSLog(@"stringFromDate: %@", stringFromDate);
Вывод NSLog:
Дата из строки: 2012-01-31 06:32:30 + 0000
stringFromDate: 2012-01-31 01:32:30