ここでは、Windows2000/XP のコマンドプロンプトでの日付処理行うバッチファイルを紹介します。
(本日の)日付をジュリアンデートに変換するバッチファイルです。ここでのジュリアンデートは、その年の1月1日からの通算日です。たとえば、2003/12/31 は 2003-365 となります。バッチファイル名は d2jd.bat としました。
@echo off REM --------------------------------------------- d2jd.bat REM 日付からジュリアンデートへの変換 REM 日付はYYYY/MM/DD 形式とする。結果は環境変数へ返す。 REM 引数がないときは本日とする。 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
ジュリアンデートを通常の日付(YYYY/MM/DD)に変換するバッチファイルです。ここでのジュリアンデートは、先ほどと同じようにその年の1月1日からの通算日です。たとえば、2003/12/31 は 2003-365 となりますが、引数としては、jd2d 365 2003 として引き渡します。バッチファイル名は jd2d.bat としました。
@echo off REM --------------------------------------------- jd2d.bat REM Julian Dateから日付への変換 REM Julian Dateは DDD [YYYY] 形式とする。結果は環境変数dtへ返す。 REM 引数がないときは環境変数 jd と yy を確認し、存在しなければ使用方法を表示する :引数評価 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
実行日のn日前の日付を計算するバッチファイルです。引数に求めたい日数を指定します。
このバッチは、前述の日付をジュリアンデートに変換するバッチファイル d2jd.bat と、ジュリアンデートを日付に変換するバッチファイル jd2d.bat を呼び出してもとめるので、両方のバッチがこのバッチと同じディレクトリ(フォルダ)に必要です。
ジュリアンデートを使う2つのバッチを呼び出すおかげで、この back.bat は大変シンプルに仕上がりました。環境変数がたくさん残るのがお作法が悪いですが(^^)
このバッチの流れは、次の通りです。
@echo off REM --------------------------------------------- back.bat REM n日前の日付を求める REM 引数に求めたい日数を指定する。結果は環境変数dtへ返す。 if "%1"=="" goto exit call d2jd %2 >nul set /a jd=jd-%1 :LOOP if %jd% GTR 0 goto recover set jdans=%jd% set /a yy=yy-1 call d2jd %yy%/12/31 > nul set /a jd= jdans + jd goto LOOP :recover call jd2d %jd% %yy% > nul echo %dt% :exitバッチファイルで日付関係の操作(1)へ戻る