#tcl
#tcl
Вопрос:
Я пытаюсь ввести строки даты, содержащие месяц и год, например, январь 2000 года.
Согласно справочной странице, %B (и %b) «При вводе соответствует названию месяца в данном языковом стандарте (в сокращенной или полной форме или в любом уникальном префиксе любой формы)», но я не могу заставить это работать:
% clock scan "January 2000" -format "%B %Y"
1475881200
% clock format 1475881200 -format "%B %Y"
October 2016
Мне кажется, что Tcl чего-то не понимает и по умолчанию соответствует сегодняшней дате.
Я бы хотел, чтобы моя команда возвращала 946684800
результат [clock scan 2000-01-01 -format %Y-%M-%D]
Есть ли проблема с [clock scan]
документацией или моим чтением документов?
Ответ №1:
Я вижу ту же проблему, но только если я не указываю день месяца. Если я это сделаю, все заработает:
% clock scan "1 January 2000" -format "%d %B %Y"
946684800
% clock format 946684800
Sat Jan 01 00:00:00 GMT 2000
Хотя да, я полагаю, что это ошибка (и вам, вероятно, следует сообщить об этом на core.tcl-lang.org отслеживание проблем), добавляя в (поддельный?) день месяца кажется достаточно простым обходным путем. В конце концов, без этого должен ли анализатор по умолчанию использовать текущий день месяца или первый или какой-либо другой день? Какой репрезентативный день? Укажите это, и проблема исчезнет.
Комментарии:
1. «Добавить фиктивный день». Спасибо. Я, должно быть, теряю хватку:-(. Я не смог найти средство отслеживания проблем на core.tcl-lang.org Согласен, принимая во внимание поднятые вами вопросы, что, вероятно, лучше оставить все как есть, поэтому был бы (был) рад видеть, что такая проблема закрыта достаточно быстро.
Ответ №2:
Интересный вопрос. Похоже, вам также нужно указать день
$ echo 'puts [clock format [clock scan "January 2000" -format "%B %Y"]]' | tclsh8.6
Sat Oct 08 00:00:00 EDT 2016
$ echo 'puts [clock format [clock scan "1 January 2000" -format "%d %B %Y"]]' | tclsh8.6
Sat Jan 01 00:00:00 EST 2000
Я вижу в документации (http://tcl.tk/man/tcl8.6/TclCmd/clock.htm ) раздел, начинающийся с
Дата определяется в соответствии с полями, которые присутствуют в предварительно обработанной строке формата. В порядке предпочтения:
окончание
- Если ни одно из приведенных выше правил не приводит к полезной дате, используется дата базового времени в данном часовом поясе.
Вероятно, это в # 3, где вы ожидаете совпадения, но это не так.