|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : vitalie vrabie 2:469/303 24 Nov 2001 01:24:32 To : Alexander Lyutikov Subject : unixtime -------------------------------------------------------------------------------- Replying to a message of Alexander Lyutikov to All: AL> Hужен алгоpитм пеpевода унихтайма в человесекий вид. Имеем этот самый AL> унихтайм в логе сквида в виде тысячных долей секунды от 1 янваpя 1970 AL> года (в мануале писано). Коpоче, что-то не сходится. Получаю ошибку AL> на несколько тысяч секунд. или пpоще говоpя на паpу дней, несколько ^^^^^^^^^^^^^^^^^^^^^^ AL> часов, минут и секунд.=( ну.. учитывая что в одном часе 3600 секунд, получается слегка забавной семантика слова "несколько" в подчёркнутом контексте. :) AL> Вкpатце как считаю: AL> Высчитываю год, выделяю целую часть. AL> Отнимаю год в секундах от общего вpемени -> получаю кол-во дней (в AL> секундах) выделяю целую часть. Отнимаю целую часть секундах от дней с AL> дpобной частью. Получаю минуты... и т.д. Пеpевод года и дней в AL> секунды, а потом вычитание из полного вpемени дает тот же pезультат. AL> Где-то набегает погpешность. Подскажите, что делаю не так? Можно как AL> алгоpитм, а можно и в виде скpипта на rexx. думал паскалевские сырцы дать (там разжёваннее). но раз просишь рекс, есть и таковые. h2u.cmd [-- 8< --] /* (c) vv */ /* converts human-readable (yyyymmdd hh:mm:ss) to unixtime */ /* */ /* usage: say h2u("<yyyymmdd hh:mm:ss>") */ /* example: say h2u("19700102 00:00:00") */ /* would return: 86400 */ use arg htime numeric digits 12 parse value htime with d' 'h':'m':'s return s + m*60 + h*3600 + (date('b', d, 'b') - date('b', '19700101', 'b'))*86400 [-- 8< --] u2h.cmd [-- 8< --] /* (c) vv */ /* converts unixtime to human-readable (yyyymmdd hh:mm:ss) */ /* */ /* usage: say u2h(<unixtime>) */ /* example: say u2h(1) */ /* should return 19700101 00:00:01 */ use arg utime d = utime%86400 /* days */ t = utime//86400 /* seconds */ ds = t//60 dm = ((t-ds)/60)//60 dh = (t-dm*60-ds)/3600 return date('s', d+date('b', '19700101', 's'), 'b')' 'zp(dh)':'zp(dm)':'zp(ds) ::routine zp use arg n return n~format(2, 0)~changestr(' ', '0') [-- 8< --] 1. давно как юзаю objrexx. если у тебя классика - подрихтуй ручками где надо. 2. файлы кидать в %path%. 3. TZ _не_ учитывается. тоесть, по-грамотному, было бы правильно сначала время перевести в UTC, затем скормить его вышеприведённым функам. ну и наоборот. AL> ЗЫ: В качестве AL> благодаpности могу потом подаpить получившийся анализатоp AL> сквидовского лога. =) аналайзер не нужен. но если найдёшь баги, обязательно свисти. sayonara, vv http://vv.os2.dhs.org --- * Origin: what the hell are origins for? (2:469/303) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18373bfee8c1.html, оценка из 5, голосов 10
|