parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Я написал в корневом auto.p следующее...

R. Averkov 14.06.2003 15:38 / 14.06.2003 15:41

Класс позволяет преобразовывать DATE(yyyy-mm-dd), TIME(HH:MM:SS) и DATETIME(yyyy-mm-dd HH:MM:SS) в то что нам надо.
@sqltrans[sql-all;forma]
$sql1[^sql-all.split[ ;h]]
$sql-date[$sql1.0]
$sql-time[$sql1.1]
$dsql[^sql-date.split[-;h]]
$tsql[^sql-time.split[:;h]]
$year[$dsql.0] #год в формате 2003
$month[$dsql.1] #месяц в формате mm -  01, 10
$day[$dsql.2] #день в формате - 01, 28
$Day[$len[^day.left(1)]^if($len ne 0){$day}{^day.right(1)}]
#день в формате 1, 28
$hour[$tsql.0] #час в формате HH - 03, 21
$min[$tsql.1]$sec[$tsql.2] #минуты в формате 01, 56
$Month_r[^switch[$month]{
^case[01]{января}
^case[02]{февраля}
^case[03]{марта}
^case[04]{апреля}
^case[05]{мая}
^case[06]{июня}
^case[07]{июля}
^case[08]{августа}
^case[09]{сентября}
^case[10]{октября}
^case[11]{ноября}
^case[12]{декабря}
}] #месяц текстом в родительном падеже
$Month_i[^switch[$month]{
^case[01]{Январь}
^case[02]{Февраль}
^case[03]{Март}
^case[04]{Апрель}
^case[05]{Май}
^case[06]{Июн}
^case[07]{Июль}
^case[08]{Август}
^case[09]{Сентябрь}
^case[10]{Октябрь}
^case[11]{Ноябрь}
^case[12]{Декабрь}
}]#месяц текстом в именительном падеже
В итоге мы получаем исходные данные, которые можем уже преобразовывать как хотим. Для этого добавим к коду следующее:
^switch[$forma]{
^case[hh:mm]{${hour}:${min}} #выдаст 03:56 
^case[dd.mm.yyyy]{${day}.${month}.${year}} #выдаст 08:06:2003
^case[DMy]{$Day $Month_r $year} #выдаст  1 июня 2003
^case[My]{$Month_i $year} #выдаст  Июнь 2003
^case[myformat]{$Day $Month_r $year ^[${hour}:${min}^]}
#выдаст  1 июня 2003 [03:56] 
}
Думаю идея ясна. Добавляем в этот switch такие case, которые нужны и потом соответственно вызываем.

^sqltrans[2003-06-14 22:31:31;myformat] выдаст нам следующее:
14 июня 2003 [22:31]

Надеюсь, что помог. :)

Parser 3 уже внутри.