Вы устанавливаете часовой пояс для вашего объекта NSDateComponents
на GMT:
[dateComps setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
Таким образом, ваша дата будет интерпретироваться как GMT.Если вы хотите часовой пояс, в котором находится устройство, используйте systemTimeZone
:
[dateComps setTimeZone:[NSTimeZone systemTimeZone]];
В целом, как отмечено в документах для timeZoneWithAbbreviation:
, сокращения могут быть неоднозначными,Если вы хотите получить определенный часовой пояс таким образом, чтобы он всегда работал независимо от местоположения устройства, вы можете использовать timeZoneForSecondsFromGMT:
.
Вы также можете установить часовой пояс для своего приложения, если хотите, вместо того, чтобы всегда ссылаться на определенный часовой пояс при создании объектов, связанных с датой:
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:60*8]];
NSTimeZone * appTZ = [NSTimeZone defaultTimeZone];