【问题标题】:Problem formatting NSDate & NSString while using GData-Objectivec-client使用 GData-Objective C 客户端时将 NSDate 格式化为 NSString 的问题
【发布时间】:2011-03-21 17:22:18
【问题描述】:

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

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

【问题讨论】:

  • 可能值得检查dateFormatterformatterBehavior 属性,看看它是否相同。
  • 我已经检查了这个属性,在这两种情况下它的值都是 0x410。
  • 可能导致 newDate 对象是相同的,问题出在我的 NSLog 上?可能是它询问 NSDate 的不同描述,如果我确实询问了一个 desctiptionWithLocale:,那么它给出了我位置的文本描述的正确时间,但我不喜欢结果,因为我想要相同的字符串,就像它是在输入中,我希望位置以 +-HHHH 表示,但不在文本中

标签: objective-c formatting nsdate gdata nsformatter


【解决方案1】:

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

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

但这只是为了讨论。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2011-08-14
      • 2012-08-10
      相关资源
      最近更新 更多