Получение даты с [NSDate date] на несколько часов

Я использую

NSDate *date = [NSDate date];

для получения даты, но дата, которую я получаю, отключена на 2 часа.

Ответ 1

NSDate объекты не имеют часовых поясов. Они представляют собой абсолютный момент времени. Однако, когда вы запрашиваете у него description (путем печати его с помощью NSLog(), например), он должен выбрать часовой пояс. Самым разумным выбором по умолчанию является GMT. Если вы не находитесь в GMT, дата будет казаться неправильной, на сумму вашего собственного смещения.

Вы всегда должны использовать NSDateFormatter для создания строки для отображения. Часовой пояс formatter должен быть установлен на ваш, который по умолчанию.

Ответ 2

Вы можете скорректировать свою дату следующим образом:

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];

Ответ 3

-(NSDate *)getDateInCurrentSystemTimeZone
{
    NSDate* sourceDate = [NSDate date];
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

    NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
    return destinationDate;
}