Объект Date в Swift не возвращает правильный час [дубликат]

git rebase -i HEAD^^

, где число ^ равно X

(в этом случае сквош две последние коммиты)

11
задан Josh Caswell 16 April 2012 в 21:16
поделиться

3 ответа

Объекты

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

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

20
ответ дан 3 revs 26 August 2018 в 01:22
поделиться

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

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
2
ответ дан Florian Burel 26 August 2018 в 01:22
поделиться
-(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;
}
0
ответ дан Khurshid 26 August 2018 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: