Получение даты от [NSDate date] на несколько часов - PullRequest
15 голосов
/ 11 декабря 2011

Я использую

NSDate *date = [NSDate date];

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

Ответы [ 3 ]

23 голосов
/ 12 декабря 2011

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

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

2 голосов
/ 11 августа 2016

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

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
0 голосов
/ 15 марта 2017
-(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;
}
...