Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9

Модерирует : KLASS, IFkO

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

res2001



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код перевода даты/времени в секунды от начала эпохи и назад.
Дата время задается в переменных YEAR,MONTH,DAY,HOUR,MIN,SEC, сейчас берется текущая дата/время.
Начало эпохи задается в YEARBEGIN.
Процедура dat2timestamp - вычисляет секунды от начала эпохи, timestamp2date - обратная операция.

Код:
@ECHO OFF
SetLocal EnableDelayedExpansion
set "YEARBEGIN=1970"
set "YEAR=%date:~6,4%"
set /a "DAY=1%date:~,2%-100"
set /a "MONTH=1%date:~3,2%-100"
rem set "DAY=42"
rem set "MONTH=10"
rem set "YEAR=1991"
set /a "HOUR=1%time:~,2%-100"
set /a "MIN=1%time:~3,2%-100"
set /a "SEC=1%time:~6,2%-100"
set /a "TOTALSEC=0"
 
rem Инициализация таблиц длин месяцев
rem        1  2  3  4  5  6  7  8  9  10 11 12
set "regul=31 28 31 30 31 30 31 31 30 31 30 31"
set "visok=31 29 31 30 31 30 31 31 30 31 30 31"
 
echo %DAY%.%MONTH%.%YEAR% %HOUR%:%MIN%:%SEC%
call:date2timestamp %YEAR% %MONTH% %DAY% %HOUR% %MIN% %SEC%
set TOTALSEC
call :timestamp2date %TOTALSEC%
echo %DAY%.%MONTH%.%YEAR% %HOUR%:%MIN%:%SEC%
exit
 
rem перевести секунды в дату
rem %1 - timestap время в секундах с 01.01.%YEARBEGIN%
rem Возврат в переменных YEAR, MONTH, DAY, HOUR, MIN, SEC
:timestamp2date
set "TT=%1"
set /a "SEC=TT%%60"
set /a "TT=(TT-SEC)/60"
set /a "MIN=TT%%60"
set /a "TT=(TT-MIN)/60"
set /a "HOUR=TT%%24"
set /a "TT=(TT-HOUR)/24"
set /a "YEAR=TT/365"
set /a "TT-=YEAR*365"
set /a "YEAR=YEAR+YEARBEGIN"
for /l %%i in (%YEARBEGIN%,1,%YEAR%) do (
    call:isleap %%i
    set /a "TT-=LEAP"
)
set /a "TT+=LEAP"
set "MONTH=1"
if %LEAP% equ 1 (set "mdays=%visok%") else (set "mdays=%regul%")
for %%i in (%mdays%) do (
    if %%i gtr !TT! goto:step3
    set /a "TT-=%%i"
    set /a "MONTH+=1"
)
:step3
set /a "DAY=TT+1"
set "TT="
exit /b
 
rem перевести дату в секунды
rem %1 - год (4 знака), %2 - месяц (1-12) %3 - день (1-31) %4 - часы (0-23) %5 - минуты (0-59) %6 - секунды (0-59)
:date2timestamp
rem yearsecs=31536000 HOURSSEC=3600 daysecs=86400
set /a "TOTALSEC=(%1-YEARBEGIN)*31536000"
for /l %%i in (%YEARBEGIN%;1;%1) do (
    call:isleap %%i
    if !LEAP! equ 1 set /a "TOTALSEC+=86400"
)
call:isleap %1
if %LEAP% equ 1 (call:month2sec "%visok%" %2) else (call:month2sec "%regul%" %2)
set /a "TOTALSEC+=(%3-1)*86400"
set /a "TOTALSEC+=%4*3600"
set /a "TOTALSEC+=%5*60+%6"
exit /b
 
rem определяет високосность года
rem Если год точно делится на 4, но не делится на 100 или если он точно делится на 400
rem function isleap(year)
rem возврат в переменной LEAP=1 - год высокосный, иначе - 0
:isleap
set "LEAP=0"
set /a "L1=%1%%4"
set /a "L2=%1%%100"
set /a "L3=%1%%400"
if %L1% equ 0 if %L2% neq 0 set "LEAP=1"
if %L3% equ 0 set "LEAP=1"
set L1=
set L2=
set L3=
exit /b
 
rem %1 - массив regul или visok, %2 - текущий месяц
:month2sec
set /a "COUNT=1"
for %%i in (%~1) do (
    if !COUNT! LSS %2 set /a "TOTALSEC+=%%i*86400"
    set /a "COUNT+=1"
)
set COUNT=
exit /b
 

Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:37 12-10-2010 | Исправлено: res2001, 20:37 12-10-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru