Я пытаюсь получить текущее время, для этого я знаю, как его получить, ниже мой код
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents3 = [calendar components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit |NSSecondCalendarUnit)fromDate:[NSDate date]];
NSInteger hour = [weekdayComponents3 hour];
NSInteger min = [weekdayComponents3 minute];
NSInteger sec = [weekdayComponents3 second];
Теперь я просто хочу добавить 1 час к текущему времени и получить ближайший следующий час, например, если текущее время 18:10, я должен получить 19:00, если текущее время 18:45, то также я должен получить 19:00.
Для этого я написал этот код
NSDateComponents *timeZoneComps1=[[NSDateComponents alloc] init];
[timeZoneComps1 setDay:day];
[timeZoneComps1 setMonth:month];
[timeZoneComps1 setYear:year];
[timeZoneComps1 setHour:hour+1];
[timeZoneComps1 setMinute:00];
[timeZoneComps1 setSecond:01];
NSDate *reqiredDate = [calendar dateFromComponents:timeZoneComps1];
Я правильно понял, используя этот код.
Теперь здесь начинается мое замешательство,
если я установлю часовой пояс на UTC
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
и попробуйте с приведенным выше кодом, я получаю немедленный следующий час, например, если текущее время 18:10, я получаю 19:30, если текущее время 18:45, то я получаю 19:30.
В том же случае, если я попытаюсь перейти в часовой пояс США (путем изменения часового пояса с помощью настроек в устройстве, а не с помощью кода), здесь я получаю правильное значение сразу в следующий час, опять же, например, если текущее время 18:10, я получаю 19:00, если текущее время 18:45, то я получаю 19:00
Поэтому я не понимаю, почему такое разное поведение и, во-вторых, как сделать его последовательным.
Я думаю, что это связано со смещением к UTC, но не уверен.