我试图转换没有时区值的字符串,如" 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
答案 0 :(得分:1)
当您使用[NSDateFormatter setTimeZone:]
时,格式化程序会根据新的时区调整显示日期,因此它会在格式化日期之前将时区偏移量添加到日期中。
NSDateFormatter默认为设备的时区,因此它与手动设置时区具有相同的效果。告诉DateFormatter使用与日期(+0000)相同的时区。
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]