Проблема преобразования Ruby on Rails DateTime в NSDate - PullRequest
6 голосов
/ 19 августа 2011

Почему это ...

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 ]

13 голосов
/ 19 августа 2011

Ваш формат даты @"yyyy-MM-dd'T'HH:mm:ss'Z'" означает, что он ищет буквальный символ "Z" в конце строки. Тем не менее, ваша строка:

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

Я не вижу там "Z", а вы? Таким образом, дата возвращается как nil, поскольку ваша строка не соответствует указанному формату.

В соответствии с документацией Шаблоны форматирования даты , вы, вероятно, ищете строку формата:

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

Однако даже это может не сработать, потому что если вы заметите, что в исходной строке есть двоеточие (":") между часами и минутами смещения часового пояса. Там нет спецификатора часового пояса, который объясняет это. Если это действительно тот формат, в котором ROR возвращает дату, значит ROR неверен.

0 голосов
/ 03 мая 2013

Я выполняю перенос дат из Ruby в iOS через JSON API, и я считаю, что я прочитал ту же статью.

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"

Обратите внимание на%:z, доступный в Ruby 1.9.3 как минимум

Есть ли ошибка Ruby 1.8.7 time.strftime% z?

...