Получение дат с помощью clock format и clock scan

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

Получение дат с помощью clock format и clock scan

Сообщение tvrsh » 23 дек 2012 12:32

Часто в скриптах требуется получать какую-либо дату. Например, это нужно в скрипте karofilm.tcl чтобы просматривать список сеансов. Для получения очень удобно использовать команду clock
Смотрите пример получения текущей даты:
<tvrsh> $$ return [clock format [clock seconds] -format %d.%m.%Y]
<@bionic> Return: 23.12.2012 - 0.116 ms.

Тут мы [clock seconds] переводим в формат %d.%m.%Y, то есть в вид 23.12.2012. Описание всех возможных параметров формата смотрите тут: http://www.tcl.tk/man/tcl8.5/TclCmd/clock.htm#M26

А что делать, если необходимо получить дату на несколько дней вперед?
В данном случае необходим clock scan:
<tvrsh> $$ return [clock format [clock scan "1 day" -base [clock seconds]] -format %d.%m.%Y]
<@bionic> Return: 24.12.2012 - 0.426 ms.

Тут мы переводим в формат дату [clock scan "1 day" -base [clock seconds]]
То есть к "базе" [clock seconds] прибавлен 1 день. Подробнее о параметрах читайте тут: http://www.tcl.tk/man/tcl8.5/TclCmd/clock.htm#M80

Вот такое коротенькое описание работы clock.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Получение дат с помощью clock format и clock scan

Сообщение tvrsh » 21 окт 2013 19:57

Если на
        set mydate [clock format [clock scan "0 day" -base [clock seconds]] -format %Y-%m-%d]
вы получаете
<bionic> [15:48:26] Tcl error [::etv::etv_pub]: time value too large/small to represent
<tvrsh> .set errorInfo
<bionic> [15:48:30] #tvrsh# set errorInfo
<bionic> Currently: time value too large/small to represent
<bionic> Currently: while executing
<bionic> Currently: "ConvertLocalToUTC $date[set date {}] $TZData($timezone) 2361222"
<bionic> Currently: (procedure "FreeScan" line 84)
<bionic> Currently: invoked from within
<bionic> Currently: "FreeScan $string $base $timezone $locale"
<bionic> Currently: (procedure "::tcl::clock::scan" line 70)
<bionic> Currently: invoked from within
<bionic> Currently: "clock scan "0 day" -base [clock seconds]"
<bionic> Currently: (procedure "::etv::etv_proc" line 24)
<bionic> Currently: invoked from within
<bionic> Currently: "::etv::etv_proc $nick $uhost $hand $chan $text"
<bionic> Currently: (procedure "::etv::etv_pub" line 8)
<bionic> Currently: invoked from within
<bionic> Currently: "::etv::etv_pub $_pub1 $_pub2 $_pub3 $_pub4 $_pub5"

то у меня эта проблема решилась раскомментированием строки
set env(TZ) "$timezone $offset"
в eggdrop.conf
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi


Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron