Números e métodos... os mágicos primeiro.
Sempre 'gostei' muito de números, dos algarismos, dos primos e capicuas,
fui bom aluno em matemáticas gerais, mas tenho uma mágoa antiga para com a numérica... ora nesta era digital os números 'sofrem' imenso com arredondamentos e truncagens ...
os números e seus métodos de representação variam de língua para língua e os programas estão cheios de 'números mágicos' que mais tarde ou mais cedo dificultam quem precisa entender os porquês, porque raio há tanta magia na lógica de um 'simples' programa, porque se teve que colocar ali no meio do nada aquele número ...
Fiquem com a magia do cálculo do número do dia Juliano, tão útil, e pronto a usar num qualquer programa 'batch' perto de si, e basta acreditar que os números que contem estão
certamente certos ...
| |
@echo off
SET "today=%date%"
ECHO todays date: %today%
CALL:DateToJDN %today% todayNo
ECHO this is Julian day no. %todayNo%
SET /a tomorrowNo=todayNo+1
ECHO tomorrow is Julian day no. %tomorrowNo%
CALL:JDNToDate %tomorrowNo% tomorrow
rem ECHO(tomorrow is %tomorrow%
ECHO tomorrow will be date: %tomorrow%
pause
goto end
rem Convert the date to Julian Day Number
:DateToJDN dd.mm.yyyy jdn=
setlocal
set date=%1
set /A yy=%date:~-4%, mm=1%date:~-7,2% %% 100, dd=1%date:~-10,2% %% 100
set /A a=mm-14,
jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075
endlocal & set %2=%jdn%
exit /B
rem Convert Julian Day Number back to date
:JDNToDate jdn dd.mm.yyyy=
setlocal
set /A
l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,d
d=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l
if %dd% lss 10 set dd=0%dd%
if %mm% lss 10 set mm=0%mm%
endlocal & set %2=%dd%-%mm%-%yy%
exit /BB
:end
|
|