Почему ошибка: недопустимая escape-последовательность?

Согласно valadoc

var now = new DateTime.now(new TimeZone.local());
var timestamp = now.format("\%F.\%T");

следует установить отметку времени «2012-08-28.09:51:06». Почему «ошибка: недопустимая escape-последовательность» на «F» и «T?» Другие форматы из valadoc вызывают ту же ошибку, что и now.to_string. () на самом деле "2012-08-28T09:51:06+0000"

Редактировать: возможно, в таргете встроенного Linux чего-то не хватает?

Изменить: тестовый код здесь печатает "(null)" в этом проекте, который использует glib 2.26.1.


person jacknad    schedule 28.08.2012    source источник
comment
Просто полуслучайное предположение, но вы пробовали "\\%F.\\%T" или "%F.%T"?   -  person NullUserException    schedule 28.08.2012
comment
@NullUserException: Да, я сделал. Оба сбрасывают ошибку сборки, но возвращают, а не строку временной метки во время выполнения.   -  person jacknad    schedule 28.08.2012
comment
Просто к вашему сведению, есть new DateTime.now_local().   -  person apmasell    schedule 28.08.2012
comment
@nemequ: как я уже сказал, попробовал это и не вызвал ошибки сборки, но не возвращает отформатированную строку даты, только .   -  person jacknad    schedule 28.08.2012
comment
Когда я сказал работает, я имел в виду это. Я получаю правильно отформатированную строку, а не пустую строку. Тестовая программа на fpaste.org/BQZ0 выдает что-то вроде 2012-08-30.10:27:20. AFAICT реализация g_date_time_format не полагается ни на что особенное из libc, поэтому результаты должны быть согласованными. Возможно, вы используете старую версию glib с ошибкой?   -  person nemequ    schedule 30.08.2012
comment
@nemequ: попробовал ваш тестовый код на цели. Я верю вам, но, возможно, это проблема glib 2.26.1, как вы предполагаете. GLib.stdout.printf ("%s\n", timestamp) печатает (null) на цели.   -  person jacknad    schedule 31.08.2012


Ответы (1)


Как упоминалось NullUserException, вы не должны включать обратную косую черту - это то, что вызывает ошибку недопустимой escape-последовательности.

Причина, по которой он все еще не работает после удаления обратной косой черты, заключается в том, что спецификатор формата %T не был добавлен до цикла 2.30. Соответствующий коммит: 414c8ce532c19fe65deb8dfb80222d0164be5cbe.

Вы можете обойти это, выполнив вместо этого что-то вроде этого:

var timestamp = now.format ("%F.%H:%M:%S");
person nemequ    schedule 30.08.2012
comment
Да! Вот оно. Бесконечно благодарен. - person jacknad; 04.09.2012