【问题标题】:Problem converting Ruby on Rails DateTime to NSDate将 Ruby on Rails DateTime 转换为 NSDate 时出现问题
【发布时间】:2011-08-18 23:15:15
【问题描述】:

这是为什么……

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)”?

【问题讨论】:

    标签: objective-c datetime nsdate


    【解决方案1】:

    @"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 是错误的。

    【讨论】:

    • 不幸的是,Rails 正在这样做......返回 -07:00 而不是 -0700。这有点糟糕。取出结肠,一切正常。
    • @wgpubs 如果你删除了所有的冒号,你可以使用@"yyyy-MM-dd'T'HHmmssZZ" 作为你的格式字符串。
    • 我使用了类似的东西......从字符串中删除了最后一个冒号(相对于字符串的长度,它始终位于相同的位置)。不过,您的解决方案似乎更容易,更直接,所以我可以接受。谢谢
    • FWIW,我可以将 ZZZZ 与 2013-06-18T22:00:00-04:00 一起使用。它返回给我2013-06-19 04:00:00 +0000
    【解决方案2】:

    我正在通过 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?

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 2019-09-03
      • 2023-03-12
      • 2021-04-02
      • 2015-12-15
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多