昨日の続き
昨日も書きましたが、以下のソースは、こちら(→http://homepage1.nifty.com/jak/batch/jdate.html)からの転載です。(コメント部分のみ若干修正しました)
d2jd.bat
@echo off REM ------------------------------------------------ d2jd.bat REM 日付をジュリアンデートへ変換(2008/04/02 --> 93 2008-93) REM 引数%1はYYYY/MM/DD形式、なしは本日 if "%1"=="" ( for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a ) else ( set orgdate=%1 ) :年月日の分割 set yy=%orgdate:~0,4% set mm=%orgdate:~5,2% set dd=%orgdate:~8,2% :月日の set /a mm=1%mm%-100 set /a dd=1%dd%-100 :月(MM)→通算日 set /a jd=(mm-1)*31 echo set sub=-003344555667 >sub.bat echo set /a jd=jd-%%sub:~%mm%,1%% >>sub.bat call sub.bat :閏年処理 :4で割り切れるか? set /a u=yy %% 4 if not %u%==0 goto ddadd :100で割り切れて、400で割り切れないか? set /a u=yy %% 400 set /a v=yy %% 100 if %v%==0 if not %u%==0 goto ddadd :2月を越えているか? if %mm% LEQ 2 goto ddadd set /a jd = jd + 1 :ddadd :通算日に日(DD)を加える set /a jd=jd+dd set jdyyyy=%yy%-%jd% echo %jd% %jdyyyy% :後処理 del sub.bat
こういうとこ(「echo set sub=-003344555667 >sub.bat」「echo set /a jd=jd-%%sub:~%mm%,1%% >>sub.bat」)なんて魔法のようです。なにをやってるんだろ。
jd2d.bat
@echo off REM ------------------------------------------------ jd2d.bat REM ジュリアンデートを日付へ変換(93 2008 --> 2008/04/02) REM 引数%1は DDD [YYYY] 形式、結果は環境変数dtへ返す。なしはダメ :引数評価 if "%1"=="" goto usage set jd=%1 :年指定チェック if "%2"=="" if "%yy%"=="" goto GetYear if not "%2"=="" set yy=%2 if %yy% GEQ 1990 goto OK :GetYear :年の取得 set yy=%date:~0,4% :OK :Julian Date 範囲のチェック if %jd% LEQ 0 goto usage :閏年処理 :4で割り切れるか? set /a u=yy %% 4 if not %u%==0 goto L1 :100で割り切れて、400で割り切れないか? set /a u=yy %% 400 set /a v=yy %% 100 if %v%==0 if not %u%==0 goto L1 if %jd% GTR 366 goto usage goto L2 :L1 if %jd% GTR 365 goto usage :L2 :環境変数の待避 set orgjd=%jd% set orgyy=%yy% set m=12 :LOOP set tmpm=0%m% set tmpm=%tmpm:~-2% call d2jd %orgyy%/%tmpm%/01 > nul if %jd% LEQ %orgjd% goto break set /a m=m-1 goto LOOP :break set /a d=orgjd - jd + 1 set mm=0%m% set mm=%mm:~-2% set dd=0%d% set dd=%dd:~-2% set dt=%orgyy%/%mm%/%dd% echo %dt% goto end :usage echo usege: Julian Date to Date echo jd2d DDD [YYYY] echo DDD -- Julian Date echo YYYY -- Year :end
参考
再度書いておきますが、こちら(→http://homepage1.nifty.com/jak/batch/jdate.html)がオリジナルです。ありがとうございました。