При использовании NSCalendar components:fromDate:
результаты основаны на текущем часовом поясе календаря, который по умолчанию равен локальному часовому поясу пользователя.
Ваша попытка установить результирующие компоненты 'timeZone
не изменяет текущие компоненты. Это повлияет только на то, как компоненты будут интерпретироваться, если вы использовали компоненты для создания нового NSDate
.
Предполагая, что ваша цель - получить компоненты date
по времени UTC, а не по местному времени, вам необходимо установить timeZone
в календаре, прежде чем получать компоненты из date
.
NSDate *date = // your date
NSCalendar *calendar = NSCalendar.currentCalendar;
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSDateComponents *components = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSCalendarUnitHour | NSCalendarUnitMinute fromDate:date];
NSLog(@"UTC Components: %@", components);
Но имейте в виду, что вы должны понимать, какой часовой пояс вы действительно хотите здесь. Убедитесь, что вы действительно хотите часовой пояс UTC. Не используйте UTC только потому, что он соответствует выводу NSLog(@"Date: %@", date);
. В этом журнале указывается дата в формате UTC.