Получение даты от [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;
}