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]