NSString到NSDate的转换问题:总是在同一个日期!

时间:2011-07-07 14:34:37

标签: objective-c datetime

这是我将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'

......相同的输出!你能救我吗?

2 个答案:

答案 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时区。