iOS Dateformatter Часовой пояс

Я пытаюсь преобразовать строку без значения часового пояса, например "31.05.2015", в NSDate.

Что не так с моим DateFormatter? Возвращает дату 2015-05-31 22:00:00 +0000, и когда я пытаюсь распечатать ее в том же формате, она печатает: 01.06.2015

-(NSDateFormatter*) dateFormatter{
    if(!_dateFormatter){
        _dateFormatter = [[NSDateFormatter alloc]init];
        [_dateAndTimeFormatter setDateFormat:@"dd.MM.yyyy"];
        [_dateAndTimeFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CEST"]];
        _dateFormatter.dateStyle = NSDateFormatterShortStyle;
        _dateFormatter.timeStyle = NSDateFormatterNoStyle;
    }
    return _dateFormatter;
}

РЕДАКТИРОВАТЬ

Я обновил его до

-(NSDateFormatter*) dateAndTimeFormatter{
    if(!_dateAndTimeFormatter){
        _dateAndTimeFormatter = [[NSDateFormatter alloc]init];
        [_dateAndTimeFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS Z"];
        _dateAndTimeFormatter.dateStyle = NSDateFormatterShortStyle;
        _dateAndTimeFormatter.timeStyle = NSDateFormatterShortStyle;
    }
    return _dateAndTimeFormatter;
}

и позвони с

NSDate *startDate = [self.dateFormatter dateFromString:@"31.05.2015"];
self.beginningValueLabel.text = [self.dateFormatter stringFromDate:startDate];

Результат по-прежнему 01.06.2015.

дата начала 2015-05-31 22:00:00 +0000

1 ответ

Когда вы используете [NSDateFormatter setTimeZone:] форматировщик будет корректировать дату для отображения на основе этого нового часового пояса, поэтому он добавляет смещение часового пояса к дате перед форматированием для отображения.

NSDateFormatter по умолчанию использует часовой пояс устройства, поэтому он будет иметь тот же эффект, что и установка часового пояса вручную. Скажите DateFormatter использовать тот же часовой пояс, что и дата (+0000).

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]
Другие вопросы по тегам