======================================================================== 【名 称】 DateUtil.CMD Version 1.00 【作成者名】 清水 和佳 (kshimz@dd.iij4u.or.jp / kshimz@air.ne.jp) 【動作環境】 OS/2 Warp + REXX (Classic Rexx) 【関連Soft】 特になし 【公開月日】 1998/05/15 【動作確認】 OS/2 Warp Ver 4.0・OS/2 Warp Server Ver 4.0 SMP 【ソフト種】 フリーソフトウェア 【転載条件】 GPL2 に従う ======================================================================== 【はじめに】  個人的なニーズで作りはじめた、Rexx による日付・時間関連のユーティリティ 群です。他の Rexx プログラムから外部ルーティンとして呼び出される事を想定 していますが、他のプログラムの内部に必要な部分を組み込み、内部ルーチンと して利用することもできます。使い方のサンプルとして、 ・rfcdate.cmd ・datetest.cmd を付けます。 このままの形での再配布は自由ですが、中身を改変したものの再配布は、オリジ ナルとの差分を添付する形でお願いします。(GPL.txt も参照してください)。 【アーカイブの内容】   DateUtil.CMD  ・・・ プログラム本体   DateUtil.TXT  ・・・ この文書   DateTest.cmd  ・・・ 機能テスト用コマンド   RFCdate.cmd   ・・・ RFC1123 形式で現在の日時を表示するコマンド   GPL.txt     ・・・ GNU 一般公有使用許諾書 【インストール方法】 適当なディレクトリに置けばいいです。 できれば、PATH の通ったディレクトリに置いてください。 (外部ルーチンとして呼び出す際に便利です。) 【基本的な呼び出し方法】  以下、Rexx プログラムからの利用方法を説明します。 1. 外部ルーチンとして利用する場合  普通の Rexx プログラムと同じですが、第一引数は DateUtil.cmd の機能名 (DateUtil.cmd 内のサブルーチン名) にしなければなりません。第二引数以 下は、呼び出す機能によって異なります。 (後述の機能説明を参照) ret = dateutil( FUNC , arg_1 , arg_2 , .... , arg_n ) if ret = .... または CALL dateutil FUNC , arg_1 , arg_2 , .... , arg_n if result = .... といった記述になります。 2. 内部ルーチンとして利用する場合  作成するプログラムの最後に、DateUtil.cmd (のうちの必要な部分) を複写 してご利用ください。内部で参照している変数は、ステム date_util. を除き、 すべて独立変数です。 (同じ名前の変数を別のサブルーチンで使っていても、 互いに影響することはない)  内部ルーチンとなるので、機能名 (DateUtil.cmd 内のサブルーチン名) を 直接呼び出すことができます。 ret = FUNC ( arg_1 , arg_2 , .... , arg_n ) if ret = .... または CALL FUNC arg_1 , arg_2 , .... , arg_n if result = .... といった記述が可能です。(引数は後述の機能説明を参照) 【機能 (サブルーチン) の概要説明】 CalcTerm 指定された期間を経過した日時を計算する CalcTZDiff 時差を加(減)算する ChkDate 日付 (YYYYMMDD 形式) として有効な値か否か検査する ChkJulDate 通算日付 (YYYYMMM 形式) として有効な値か否か検査する ChkTime 時間 (hh:mm:ss / hhmmss 形式)として有効な値か否か検査する Date2Days 日付 YYYYMMDD 形式を DAYS 形式 (西暦の通算日) へ変換する Date2Julian 日付 YYYYMMDD 形式を Julian Date 形式 (通算日) へ変換する DayOfTheWeek YYYYMMDD 形式で指定された日の、曜日名を得る Days2Date DAYS 形式 (西暦の通算日) を YYYYMMDD 形式へ変換する ExpireDate 現在時刻から、指定された期間を経過した日時を計算する FileLastMod 指定したファイルの最終更新日時を得る Julian2Date Julian Date 形式 (通算日) を YYYYMMDD 形式へ変換する MonthNameToNum 指定された月名の、月数を得る NameOfMonth 指定された数の月の、月名を得る PrintDate 現在の日付と時間を得る QueryDays 指定された年の、年間の日数を得る QueryDayTbl 指定された年の、1月から12月までの日数テーブルを得る QueryFebDays 指定された年の、2月の日数を得る RfcDate 世界標準時で現在の日付と時間を得る Secs2Time 指定された通算秒数から時刻を得る Time2Secs 指定された時刻から通算秒数を得る ToRfc1123 YYYYMMDDhhmmss または YYYYMMDDhh:mm:ss 形式の日時を RFC1123 形式 (wkday, DD Mon YYYY HH:MM:SS) へ変換する TZConvert 指定されたローカル時刻を、指定の時間帯の時刻へ変換する ※ この文書、および DateUtil.cmd でも、アルファベット順に記述しています。 【機能 (サブルーチン) の詳細説明】 ・CalcTerm (引数 1, 引数 2, 引数 3) 指定された期間を経過した日時を計算する 引数 1 : 起算日時 (YYYYMMDDhhmmss / YYYYMMDDhh:mm:ss) 引数 2 : 期間 (YYYY/MM/DD/hh:mm:ss) YYYYMMDDhhmmss 0001 : 1年 0000/01 : 1月 (0000/1, 00/01, 0/1 等も可) 0001/06 : 1年と6ヶ月 0/0/0/12 : 12時間 0/0/0/0:15:30 : 15分30秒 引数 3 : '-' なら遡る。それ以外か、省略されたら経過後の日時 戻り値 : YYYYMMDDhhmmss または YYYYMMDDhh:mm:ss 引数 1 のフォーマットに合わせて返す ・CalcTZDiff (引数 1, 引数 2) 時差を加(減)算する 引数 1 : 時間 (YYYYMMDDhhmmss / YYYYMMDDhh:mm:ss) 引数 2 : 時差 (n : -24 < n < 24) 戻り値 : YYYYMMDDhhmmss (固定) ・ChkDate (引数 1) 日付 (YYYYMMDD 形式) として有効な値か否か検査する 引数 1 : 対象日付 戻り値 : 0 または 1 (0:無効 1:有効) ・ChkJulDate (引数 1) 通算日付 (YYYYMMM 形式) として有効な値か否か検査する 引数 1 : 対象通算日 戻り値 : 0 または 1 (0:無効 1:有効) ・ChkTime (引数 1) 時間 (hh:mm:ss / hhmmss 形式)として有効な値か否か検査する 引数 1 : 対象時間 戻り値 : 0 または 1 (0:無効 1:有効) ・Date2Days (引数 1) 日付 YYYYMMDD 形式を DAYS 形式 (西暦の通算日) へ変換する OS/2 REXX に合わせ 1599/12/31 を 584021 として起算 そのため、1600/01/01 (= 584022) 以降のみを対象とする 引数 1 : 対象日付 (YYYYMMDD) 戻り値 : 西暦の通算日 (Ex. 1998/01/01 → 729389 ) ・Date2Julian (引数 1) 日付 YYYYMMDD 形式を Julian Date 形式 (通算日) へ変換する 現行のグレゴリオ暦による日付のみを対象とする 1600年以降であれは問題ない 引数 1 : 対象日付 (YYYYMMDD) 戻り値 : 通算日 (YYYYMMM Ex. 1998/02/01 → 1998032 ) ・DayOfTheWeek (引数 1) YYYYMMDD 形式で指定された日の、曜日名を得る 引数 1 : 対象日 (YYYYMMDD) 戻り値 : 曜日の名前 (Mon, Tue, Wed, ..... , Sun ) ・Days2Date (引数 1) DAYS 形式 (西暦の通算日) を YYYYMMDD 形式へ変換する OS/2 REXX に合わせ 1600/12/31 を 584387 として起算 そのため、1601/01/01 (= 584388) 以降のみを対象とする 引数 1 : 対象通算日 (n : n > 584387) 戻り値 : YYYYMMDD (Ex. 729389 -> 19980101) ・ExpireDate (引数 1) 現在時刻から、指定された期間を経過した日時を計算する RFC1123 フォーマット (wkday, DD Mon YYYY HH:MM:SS GMT) で返す。時間帯は、GMT 固定 引数 1 : 期間 (YYYY/MM/DD/hh:mm:ss) 0001 : 1年 0000/01 : 1月 (0000/1, 00/01, 0/1 等も可) 0001/06 : 1年と6ヶ月 0/0/0/12 : 12時間 0/0/0/0:15:30 : 15分30秒 戻り値 : wkday, DD Mon YYYY HH:MM:SS GMT ・FileLastMod (引数 1, 引数 2, 引数 3) 指定したファイルの最終更新日時を得る RFC1123 フォーマット (wkday, DD Mon YYYY HH:MM:SS TZ) で返す 引数 1 : ファイル名を指定する 引数 2 : Time Zone を指定する 'G' - 環境変数 TZ の値をもとに GMT に換算する 'L' - ローカル時間を、環境変数 TZ で指定された Time Zone名をつけて返す 'T' - 環境変数 TZ の値をもとに、引数 3 で指定された Time Zone に換算する 指定されていない場合、 GMT (世界標準時) を返す 引数 3 : 引数 1 が 'T' のとき、Time Zone 名と時差を指定する 例) JST-9 , EST5 戻り値 : wkday, DD Mon YYYY HH:MM:SS TZ 注意 : 夏時間には対応していない。 ・Julian2Date (引数 1) Julian Date 形式 (通算日) を YYYYMMDD 形式へ変換する 現行のグレゴリオ暦による日付のみを対象とする 1600年以降であれは問題ない 引数 1 : 対象通算日 (YYYYMMM) 戻り値 : YYYYMMDD (Ex. 1998032 -> 19980201) ・MonthNameToNum (引数 1) 指定された月名の、月数を得る。 引数 1 : 対象月名 (Jan, Feb, Mar, ..... , Dec ) 戻り値 : 月の数字 (1, 2, 3, ..... , 12) ・NameOfMonth (引数 1, 引数 2) 指定された数の月の、月名を得る 引数 1 : 対象月数 (1, 2, 3, ..... , 12) 引数 2 : 名前の長さ 'L' が指定された場合のみ、フルネームを戻す それ以外の場合は省略形 (先頭3文字) を戻す 戻り値 : 月の名前 (Jan, Feb, Mar, ..... , Dec ) ・PrintDate (引数 1, 引数 2) 現在の日付と時間を得る RFC1123 フォーマット (wkday, DD Mon YYYY HH:MM:SS TZ)で返す 引数 1 : Time Zone を指定する 'G' - 環境変数 TZ の値をもとに GMT に換算する 'L' - ローカル時間を、環境変数 TZ で指定された Time Zone名をつけて返す 'T' - 環境変数 TZ の値をもとに、引数 2 で指定された Time Zone に換算する 指定されていない場合、 GMT (世界標準時) を返す 引数 2 : 引数 1 が 'T' のとき、Time Zone 名と時差を指定する 例) JST-9 , EST5 戻り値 : wkday, DD Mon YYYY HH:MM:SS TZ 注意 : 夏時間には対応していない。 ・QueryDays (引数 1) 指定された年の、年間の日数を得る 引数 1 : 対象年 (YYYY) 戻り値 : 日数 (365 または 366) ・QueryDayTbl (引数 1) 指定された年の、1月から12月までの日数テーブルを得る 引数 1 : 対象年 (YYYY) 戻り値 : 日数テーブル ・QueryFebDays (引数 1) 指定された年の、2月の日数を得る 引数 1 : 対象年 (YYYY) 戻り値 : 日数 (28 または 29) ・RfcDate (引数なし) 世界標準時で現在の日付と時間を得る RFC1123 フォーマット (wkday, DD Mon YYYY HH:MM:SS TZ)を返す 戻り値 : wkday, DD Mon YYYY HH:MM:SS +0000 (GMT) ・Secs2Time (引数 1) 指定された通算秒数から時刻を得る 引数 1 : 00:00:00 を 0 とした通算秒数 (0 - 86400) 戻り値 : 時刻 (hh:mm:ss) ・Time2Secs (引数 1) 指定された時刻から通算秒数を得る 引数 1 : 対象時刻 (hh:mm:ss) 戻り値 : 00:00:00 を 0 とした通算秒数 (0 - 86400) ・ToRfc1123 (引数 1) YYYYMMDDhhmmss または YYYYMMDDhh:mm:ss 形式を、RFC1123 形式 (wkday, DD Mon YYYY HH:MM:SS) へ変換する 引数 1 : YYYYMMDDhhmmss または YYYYMMDDhh:mm:ss 形式の日時 戻り値 : RFC1123 形式 (wkday, DD Mon YYYY HH:MM:SS) の日時 ・TZConvert 指定されたローカル時刻を、指定の時間帯の時刻へ変換する RFC1123 フォーマット (wkday, DD Mon YYYY HH:MM:SS TZ) で返す 引数 1 : 時刻 (YYYYMMDDhhmmss / YYYYMMDDhh:mm:ss) 引数 2 : Time Zone を指定する 'G' - 環境変数 TZ の値をもとに GMT に換算する 'L' - ローカル時間を、環境変数 TZ で指定された Time Zone名をつけて返す 'T' - 環境変数 TZ の値をもとに、引数 3 で指定された Time Zone に換算する 指定されていない場合、 GMT (世界標準時) を返す 引数 3 : 引数 1 が 'T' のとき、Time Zone 名と時差を指定する 例) JST-9 , EST5 戻り値 : wkday, DD Mon YYYY HH:MM:SS TZ 注意 : 夏時間には対応していない。