我正在与一个奇怪的情况作斗争:相同的代码在两个不同的项目中有所不同。一个项目只是带有此代码的空命令行实用程序。第二个项目是链接的gdata-objectivec-client库。
以下是代码:
static NSString * const dateFormat = @"MM/dd/yyyy HH:mm:ss Z";
NSString *tmp_string = @"03/08/2011 10:07:36 +0300";
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease] ;
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateFormat: dateFormat ];
NSDate *newDate = [dateFormatter dateFromString: tmp_string];
NSLog(@"dateFromThatString: %@", newDate);
在命令行实用程序中,结果相同
“03/08/2011 10:07:36 +0300”
但是在与gdata-objectivec-client链接的项目中,结果更改为
“03/08/2011 07:07:36 +0000”
我无法找到问题所在,有什么建议吗?
答案 0 :(得分:1)
阅读这个主题我已经了解到“NSDate不知道时区,它总是以独立于时区的方式存储日期(作为特定参考日期以来的时间跨度)”,所以这两个NSDate对象在两个不同的项目中表示两个不同的字符串是相同的,NSDate对象的描述之间存在一些差异,所以..这对于将来的工作来说不是一个大问题,因为我只需要这些描述来进行简单的调试。我不会使用描述方法,而是[NSFormatted stringFromDate:]。
有趣的是gdata-objectivec-client如何影响项目,nsdate obj的描述返回相同的时间,但响应+0000 gmt offset。
但这仅供讨论。
答案 1 :(得分:0)
看起来日期格式化程序在每种情况下都有不同的时区。您可以使用-[NSDateFormatter setTimeZone:]
更改时区。