iOS Dateformatter时区

时间:2015-06-22 13:10:46

标签: ios nsdateformatter

我试图转换没有时区值的字符串,如" 31.05.2015"到NSDate。

我的DateFormatter出了什么问题?它返回日期2015-05-31 22:00:00 +0000 当我尝试使用相同的格式化程序打印它时,它会打印:01.06.2015

assignee

修改

我将其更新为

-(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;
}

结果仍然是01.06.2015。

startDate是2015-05-31 22:00:00 +0000

1 个答案:

答案 0 :(得分:1)

当您使用[NSDateFormatter setTimeZone:]时,格式化程序会根据新的时区调整显示日期,因此它会在格式化日期之前将时区偏移量添加到日期中。

NSDateFormatter默认为设备的时区,因此它与手动设置时区具有相同的效果。告诉DateFormatter使用与日期(+0000)相同的时区。

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]