Как я могу создать метку времени RFC 3339 в TCL?

Я унаследовал сценарий TCL (я не знаком с языком), и мне нужно добавить к нему временную метку RFC 3339:

2012-04-05T12:13:32.123456-08:00

После поиска в Google я не нашел никаких средств отображения микросекунд или смещения часового пояса (я нашел способ показать название часового пояса, но это не помогает).
Есть ли способ сделать это без вызов внешнего процесса?


tcl
person kwiqsilver    schedule 05.04.2012    source источник
comment
Я считаю, что это будет зависеть от вашей версии TCL.   -  person resmon6    schedule 05.04.2012
comment
@ resmon6 Единственной проблемной частью будет получение миллисекунд; это было вообще недоступно до 8.4, а синтаксис изменился в 8.5.   -  person Donal Fellows    schedule 06.04.2012


Ответы (1)


В TCL8.5 вы можете попробовать следующую команду:

% clock format [clock seconds] -format "%Y-%m-%dT%T%z"
2012-04-05T16:06:07-0500

Это дает вам все, кроме разрешения менее секунды. Команда clock microseconds даст вам время в микросекундах, но я не могу найти соответствующий идентификатор строки формата. Вы можете использовать это для создания собственной команды с нуля:

proc timestamp_rfc3339 {} {
    set us [clock microseconds]
    set sec [expr {$us / 1000000}]
    set micro [expr {$us % 1000000}]
    set ts [clock format $sec -format "%Y-%m-%dT%T"]
    regexp {(...)(..)} [clock format $sec -format "%z"] matched tzh tzm
    return [format "%s.%06s%s:%s" $ts $micro $tzh $tzm]
}

Запуск этого приводит к отметке времени, такой как 2012-04-05T16:35:06.366378-05:00.

Изменить: обновлен пример кода, чтобы включить настройки пользователя 1179884 (см. комментарии) и включить в процедуру.

person bta    schedule 05.04.2012
comment
Я сделал это: ` regexp {(...)(..)} [формат часов [секунды часов] -формат %z] соответствующие часы и минуты возвращаются [формат %s.%s%s:%s [отметка времени -формат % Y-%m-%dT%X] [выражение [микросекунды часов] % 1000000] $часы $минуты]100000] $часы $минуты]`. В основном то же самое, но я использовал регулярное выражение, чтобы поставить двоеточие в смещение часового пояса, что требуется в rfc3339. - person kwiqsilver; 06.04.2012
comment
Еще одна необходимая вещь... Мне пришлось изменить %s для микросекунд на %06s, чтобы сохранить ведущие нули. - person kwiqsilver; 06.04.2012
comment
@user1179884: user1179884: Вы должны точно записать, что вы сделали, как самостоятельный ответ. (Это разрешено!) Затем мы можем показать, как найти точное решение проблемы, а также проголосовать за него. - person Donal Fellows; 06.04.2012
comment
@ user1179884- Для полноты картины я отредактирую свой ответ и включу ваши настройки. - person bta; 09.04.2012