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

Я использую

NSDate *date = [NSDate date];

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

3 ответа

Решение

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

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

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

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
-(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;
}
Другие вопросы по тегам