0

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

在命令行实用程序中,结果是相同的

“2011 年 3 月 8 日 10:07:36 +0300”

.

但是在 gdata-objectivec-client 链接到它的项目中,结果更改为

“2011 年 3 月 8 日 07:07:36 +0000”

我找不到什么问题,有什么建议吗?

4

2 回答 2

1

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

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

但这只是为了讨论。

于 2011-03-21T09:22:18.717 回答
0

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

于 2011-03-18T15:17:32.277 回答