将Ruby on Rails DateTime转换为NSDate的问题

时间:2011-08-18 23:15:16

标签: objective-c datetime nsdate

为什么会......

NSString *mydate = @"2011-07-20T23:59:00-07:00"

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];

    NSLog(@"%@", [[dateFormatter dateFromString:mydate] description]);

...在控制台中返回“(null)”?

2 个答案:

答案 0 :(得分:13)

您的日期格式@"yyyy-MM-dd'T'HH:mm:ss'Z'"表示它正在字符串末尾查找文字“Z”字符。但是,您的字符串是:

@"2011-07-20T23:59:00-07:00"

我没有看到“Z”,你呢?因此,日期返回nil,因为您的字符串与指定的格式不匹配。

根据Date Formatting Patterns documentation,您可能正在寻找格式字符串:

@"yyyy-MM-dd'T'HH:mm:ssZZ"

但是,即使 也可能无效,因为如果您注意到源字符串在时区偏移的小时和分钟之间有一个冒号(“:”)。没有时区说明符可以解释这一点。如果这确实是ROR返回日期的格式,那么ROR是错误的。

答案 1 :(得分:0)

我正在通过JSON API将日期从Ruby传输到iOS,我相信我已阅读相同的文章。

http://www.cimgf.com/2012/05/29/importing-data-made-easy/

我几乎肯定他们错误地将'Z'添加为字符串文字

-

要让Ruby输出,因为您可能期望我执行以下操作:

 1.9.3-p392 :012 > s = Time.now
  => 2013-05-03 15:47:51 +0100 
 1.9.3-p392 :013 > s.strftime("%Y-%m-%d\T%H:%M:%S%:z")
  => "2013-05-03T15:47:51+01:00"

注意至少在Ruby 1.9.3中可用的%:z

Is there a Ruby 1.8.7 time.strftime %z bug?