问题格式化NSDate&使用GData-Objectivec-client时的NSString

时间:2011-03-18 14:51:22

标签: objective-c formatting nsdate gdata nsformatter

我正在与一个奇怪的情况作斗争:相同的代码在两个不同的项目中有所不同。一个项目只是带有此代码的空命令行实用程序。第二个项目是链接的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”

我无法找到问题所在,有什么建议吗?

2 个答案:

答案 0 :(得分:1)

阅读这个主题我已经了解到“NSDate不知道时区,它总是以独立于时区的方式存储日期(作为特定参考日期以来的时间跨度)”,所以这两个NSDate对象在两个不同的项目中表示两个不同的字符串是相同的,NSDate对象的描述之间存在一些差异,所以..这对于将来的工作来说不是一个大问题,因为我只需要这些描述来进行简单的调试。我不会使用描述方法,而是[NSFormatted stringFromDate:]。

有趣的是gdata-objectivec-client如何影响项目,nsdate obj的描述返回相同的时间,但响应+0000 gmt offset。

但这仅供讨论。

答案 1 :(得分:0)

看起来日期格式化程序在每种情况下都有不同的时区。您可以使用-[NSDateFormatter setTimeZone:]更改时区。