这是我将NSString
解析为NSDate
对象的类方法。这是代码:
+ (NSDate *) stringToDate:(NSString *) string { NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.AAA Z"]; NSDate *date = [dateFormatter dateFromString:string]; NSLog(@"stringToDate(\"%@\") = '%@'", string, date); [dateFormatter release]; return date; }
并运行它我得到以下输出:
stringToDate("2011-07-07 16:26:07.000 +0200") = '2011-07-06 22:00:00 +0000' stringToDate("2011-07-07 16:26:17.000 +0200") = '2011-07-06 22:00:00 +0000'
......相同的输出!你能救我吗?
答案 0 :(得分:1)
你应该写:
NSLog(@"stringToDate(\"%@\") = '%@'", string,
[dateFormatter stringFromDate:date]);
否则,NSLog
会调用description
对象的date
方法。以下是文档中关于此方法的内容:
<强>描述强>
返回接收者的字符串表示。
- (NSString *)说明
返回值
接收器的字符串表示形式,国际格式为YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM表示GMT小时和分钟的时区偏移(例如,“2001-03-24” 10:45:32 +0600“)。
如您所见,格式与您使用的格式不完全相同。
修改强>
尝试将dateFormatter
的dateFormat参数更改为yyyy-MM-dd HH:mm:ss Z
,并使用[dateFormatter stringFromDate:date]
显示您的日期。
答案 1 :(得分:1)
如果我说得对,那么你的问题就是这两个日期并不完全相同。
如果这是问题,那么
行[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
负责。它将给定的时间对象转换为GMT + 00时区。