|
||
Заголовок: Loaddir | вpемя последней модификации Прислано пользователем box_vma на 06.03.20 в 13:35:41 Добрый день! Подскажите, кто знает. Из документации: Оператор loaddir заносит в extrd.dat время последней модификации файла в виде числа, возвращаемого Windows. Как распаковать это число, чтобы работать с обычными единицами времени. Решение: Windows возвращает упакованное время в 32-битном числе; здесь показано назначение битовых полей: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |-year------| |-mon-| |-day---| |-hour--| |-min-----| |-sec---| Ниже показан пример распаковки. Обратите внимание, что для хранения секунд используется только 5 бит (числа от 0 до 31), поэтому время сохраняется с точностью две секунды. Для хранения года используется 7 бит (числа от 0 до 127), там указывается год минус 1980. loaddir [dir 0]+'*.rpt' t=[ged 'ldt.1'] Packed time: ^^^^^^^^^^^^^^^t se=(t % 32)*2 Sec: ^se t=[tr t/32]; mi=t % 64 Min: ^mi t=[tr t/64]; ho=t % 32 Hour: ^ho t=[tr t/32]; da=t % 32 Day: ^da t=[tr t/32]; mo=t % 16 Month: ^mo ye=t/16+1980 Year: ^^^ye Дата модификации файла 06.03.2020 14:32 (Правый нижний угол FAR) При использовании рекомендации по распаковке в ФБП выдает следующую информацию: Packed time: 1583494351 Sec: 30 Min: 38 Hour: 6 Day: 2 Month: 3 Year: 2027 Как корректно распаковать дату модификации файла? Спасибо. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем Boris, Kiev. на 06.03.20 в 19:04:24 Вот эта п.п. работает давненько. ... TI=[ged 'ldt.1'];call F_TI_CR TI:^^^^^^^^^^^^^^^^^^^^^^^^^^^^TI ... stop :F_TI_CR local T,S,I,H,D,M,Y *t=TI *Packed time: ^^^^^^^^^^^^^^^t T=TI+2*64*64 *Packed time2: ^^^^^^^^^^^^^^^t S=(T%32)*2 *Sec: ^S t:^^^^^^^^^^^^^T T=[tr T/32]; I=T%64 *Min: ^I t:^^^^^^^^^^^^^T T=[tr T/64]; H=T%32-2 *Hour: ^h t:^^^^^^^^^^^^^T T=[tr T/32]; D=T%32 *Day: ^d t:^^^^^^^^^^^^^T T=[tr T/32]; M=T%16 *Month: ^M t:^^^^^^^^^^^^^T Y=T/16+1980 *Year: ^^^^Y TI=[cp [intsn 100+D],2,2]+'.'+[cp [intsn 100+M],2,2]+'.'+[intsn Y]+' '+[cp [intsn 100+H],2,2]+':'+[cp [intsn 100+I],2,2] TI:^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TI *stop return |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем mine-R на 07.03.20 в 02:26:12 on 03/06/20 в 13:35:41, box_vma wrote:
Из разряда "не знаю, но всё-равно подскажу" :D :D Поштурмовал я немного Гугл по теме, ничего сильно внятного не накопал, из обрывков информации сляпал формочку, как информацию к размышлениям. В общем, вот: * UTC TIMESTAMP EXPERIMENT Предположим, что 1970.01.01 00:00 это начало эпохи принимаемое за 0. От 0 до нашего момента прошла 1583494351 секунда. Предположим также, что : 1 минута = 60 сек. 1 час = 3600 сек. 1 день = 86400 сек. 1 месяц = 2629743 сек. 1 год = 31556926 сек. А также, что 1 мес = 30.43522 дн. в среднем 1 дн. = 24 ч. 1 год = 12 мес. ________________________________________ IN=1583494351 * MI=60 HR=3600 DY=86400 MN=2629743 YY=31556926 * DM=30.43522 * DH=24 * MY=12 * Сколько лет надо прибавить к началу эпохи: YP=[TR IN/YY] ^^^^^^^^^^^^^^YP Проверяем: +1970 YN=1970+YP ^^^^^^^^^^^^^^YN (1-й элемент даты) __________________________________________ Сколько месяцев надо прибавить к началу эпохи: MP=[TR IN/MN]-(YP*MY) ^^^^^^^^^^^^^^MP Проверяем: +01 MM=1+MP ^^^^^^^^^^^^^^MM (2-й элемент даты) __________________________________________ Сколько дней надо прибавить к началу эпохи: DP=[TR IN/DY]-[TR IN/MN]*DM ^^^^^^^^^^^^^^DP Проверяем: +01 DD=1+DP ^^^^^^^^^^^^^^DD (3-й элемент даты) __________________________________________ Сколько часов надо прибавить к началу эпохи: HP=[TR IN/HR]-[TR IN/DY]*DH ^^^^^^^^^^^^^^HP (4-й элемент даты) __________________________________________ Сколько минут надо прибавить к началу эпохи: MT=[TR IN/MI]-[TR IN/HR]*MI ^^^^^^^^^^^^^^MT (5-й элемент даты) __________________________________________ Сколько секунд еадо прибавить к началу эпохи: SE=IN-[TR IN/MI]*MI ^^^^^^^^^^^^^^SE (6-й элемент даты) __________________________________________ Дата: DA=[INTSN YN]+'.' TT='0'+[INTSN MM] TT=[CP TT,([LENGTH TT]-1),2] DA=DA+TT+'.' TT='0'+[INTSN DD] TT=[CP TT,([LENGTH TT]-1),2] DA=DA+TT+' ' TT='0'+[INTSN HP] TT=[CP TT,([LENGTH TT]-1),2] DA=DA+TT+':' TT='0'+[INTSN MT] TT=[CP TT,([LENGTH TT]-1),2] DA=DA+TT+':' TT='0'+[INTSN SE] TT=[CP TT,([LENGTH TT]-1),2] DA=DA+TT+' UTC' ^^^^^^^^^^^^^^^^^^^^^^DA Если ваше время 14:32 значит вы в часовом поясе UTC + 3 С самим loaddir не стал морочиться, ведь вопрос не в нём, а в интерпретациях выдаваемой строки штампа даты-времени. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем box_vma на 07.03.20 в 09:01:21 Спасибо. Результат работы формы предложенной Boris, Kiev: TI:02.03.2027 08:38, что не совсем верно Результат работы формы предложенной mine-R 2020.03.06 11:32:31 UTC, верный результат Еще раз спасибо. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем mine-R на 07.03.20 в 12:09:19 Добавлю, что переменная MI в 5-м и 6-м элементах даты несет разную семантическую нагрузку. Просто и в минуте 60 секунд, и в часе 60 минут, вот я по рассеянности и лени не поинициализировал дополнительную переменную в 60. Да и лишний TR думаю не помешает в 3-м элементе, чтобы было [TR[TR IN/DY]*DM] да и полно наверное ещё корявостей.. А вот дополнение ведущих нулей у Бориса в виде [cp [intsn 100+D],2,2] это изящненько. И по скорости должно выиграть. Возьму себе на заметку. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем Boris, Kiev. на 07.03.20 в 16:34:53 on 03/07/20 в 09:01:21, box_vma wrote:
Мои извинения. Наши сервера меняли формат времени в loaddir. Вам предложен фрагмент из рабочих форм и который пашет c последней версией новогоднего адаптера ФБП версии 4.22. ВВОДИМ КУРСЫ С ОФИЦИАЛЬНОЙ СТРАНИЦЫ НАЦ.БАНКА УКРАИНЫ Интересуют курсы НБУ на 07.03.2020 Клиент получил файл ответа НБУ -----------------------------------Размер-----Изменен--------- -[F8]-| |L:\_BOX-19_\_ny_\AD\KURSFINT-AD.XML | 11232| 07.03.2020 07:38|- [F8] - для удаления имеющегося файла --> для обновления или ввода курсов на другую дату. -----------------курсы НБУ из интернет. ----------в нашем ЖО RUB - 0.37148 на 07.03.2020 === 0.371480 USD - 24.74130 на 07.03.2020 === 24.741300 TRY - 4.06070 на 07.03.2020 === 4.060700 EUR - 27.69420 на 07.03.2020 === 27.694200 Текущие курсы в системе соответствуют НБУ на 07.03.2020 |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем mine-R на 07.03.20 в 17:34:11 Заморочился таки с настройкой ярлыков под сеть и с самим loaddir Подтверждаю, на сервере 3.28 подпрограмма Бориса и стандартный алгоритм (http://hdru.com/OLD_WWW/messages/3499.htm ) из документации отрабатывают отлично. Но и штамп даты-времени для 6 марта 2020 там соответственно выглядит так: 1282429190 Осталось понять с какой версии сменился алгоритм.. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем Boris, Kiev. на 07.03.20 в 19:25:59 on 03/07/20 в 17:34:11, mine-R wrote:
Другого подобного прецедента в версиях не припоминаю. Да, и честно, мало была востребована эта функция. На сегодня пользую 4.22(сервер-новогодний адаптер) и 4.40(сервер). Глубже 10-ти лет уже и не помню запуска баз. Т.к. есть [VER], правда она не стыкуется с оф.версиями, но отличается в адаптере- 4, на сервере- 4.4, поэтому можно такую универсальную п.п. сделать для адаптера и сервера: :UNIX_TIM2 * входит TI-unix время. local KD,M,Y,DS,DD,HH,MM,SS * https://www.cy-pr.com/tools/time/ - ЭТО ПРО unix - время. *Packed time: *TI:^^^^^^^^^^^^^^^^^ti if [ver]=4.0 call F_TI_CR;return;endif TI=TI+2*60*60 ЭТО НАША МЕСТНАЯ ПОПРАВКА НА 2 ЧАСА TI=TI-657417600(ЭТО НАЧАЛО ЭРЫ ХАКЕРС ДИЗАЙН 1.11.1990 ГОДА) *ti;^^^^^^^^^^^^ti KD=[tr TI/(24*60*60)] кол-во целых дней *KD:^^^^^KD^^^ TI=TI-KD*24*60*60) *TI:^^^^^^^^TI HH=[tr TI/60/60] *HH:^^^HH TI=TI-HH*60*60 *TI:^^^^^TI MM=[tr TI/60] *MM:^^^^MM SS=TI-MM*60 *SS:^^SS DD=[antida KD+1] чтобы не морочиться с днями и месяцами DD=[sn DD,9,2] *DD;^^^^^^^^^^DD D=[vl [cp DD,8,2] M=[vl [cp DD,5,2] Y=[vl [cp DD,1,4] TI=[cp [intsn 100+D],2,2]+'.'+[cp [intsn 100+M],2,2]+'.'+[sn Y,4,0]+' '+[cp [intsn 100+HH],2,2]+':'+[cp [intsn 100+MM],2,2]+':'+[cp [intsn 100+SS],2,2] return Попробуйте. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем mine-R на 07.03.20 в 20:20:31 on 03/07/20 в 19:25:59, Boris, Kiev. wrote:
Работает! :) Это конечно намного более оптимизированный алгоритм, чем моя форма-размышление. Я бы ещё сделал вот так: if [ver]<=4.0 но это уже опционально. |
||
Заголовок: Re: Loaddir | вpемя последней модификации Прислано пользователем box_vma на 10.03.20 в 08:11:13 Спасибо. Все работает!!! |
||
Powered by YaBB 1 Gold - SP 1.3.2! Forum software copyright й 2000-2004 Yet another Bulletin Board |