2010年9月5日日曜日

mktime = 特定日時の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk専用) - AWK

AWKの時刻取得関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
特定日時の時刻値(= 基準時刻からの経過秒数 = Unix Time)を調べます。

o 時刻文字列に変換したい時は、「strftime = 時刻を文字列に変換する


**** 書式
--------
mktime( 時刻文字列 )
--------

o この関数は、Gawkの拡張機能です。
o 日時文字列 -- 数字の並びで指定します。
   + 時刻文字列の書き方は、"年 月 日 時 分 秒 [夏時間フラグ]"
   + 書き方の例。"2010 3 9 23 59 59" もしくは、"2010 3 9 23 59 59 0"
   + 月などの前ゼロはお好みで。付けても付けなくても、同じ結果になります。
   + 詳しい書き方は、下の通りです。
o 戻り値 -- -1以外 = 基準時刻からの経過秒数(= Unix time) / -1 = 変換失敗
   + 通常、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数。但し、閏秒は数えません。

** 日時文字列 の書き方について
o 夏時間フラグは、省略も出来ます。
o 年以外は、0や負の値を指定する事も出来ます。
   + 月の場合、0月は、前年の12月を指します。-1なら11月です。
   + 日の場合、0日は、前月の最終日を指します。-1なら2日前です。
   + 時分秒は、素直に計算出来ます。-1時なら1時間前です。
o 数字の間に入れるのは、半角空白です。2つ入れたり、タブ文字を入れても大丈夫でした。
o 夏時間フラグは、1 = 夏時間 / 0 = 標準時間 / -1 = 自動判定(初期値)
o 夏時間の自動判定方法は、処理系をコンパイルした時に使ったC言語処理系に依存します。
o 今の所、指定出来る時刻は次の通りです。
   + 世界協定時: 1970年1月1日0時0分0秒(UTC)から 2038年1月19日3時14分7秒(UTC)まで
   + 日本標準時: 1970年1月1日9時0分0秒から 2038年1月19日12時14分7秒まで
   + なお、2038年以降指定出来ない問題は、近い将来登場する(おそらく64ビットOS用の)処理系で解決される見通しです。


**** 使用例
--------
BEGIN {
print mktime("2010 12 31 -12 0 0"); # 12時間前の時刻値を求めます。
print strftime("%Y/%m/%d %H:%M:%S", mktime()); # 文字列にしたい時
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 特定日時の時刻値(= 基準時刻からの経過秒数 = Unix Time)を調べます。
o 基準時刻は、通常、UTC(= 協定世界時)の1970年1月1日の0時です。閏秒は数えません。
o 詳しくは、「systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる」の通りです。
o 戻り値は、整数です。読み易い文字列に変換したい時には、strftimeを使います。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6

o この機能は、AWKのコンパイル環境によっては、2038年問題を抱えています。
o 2038年1月19日3時14分7秒を超える時刻を指定すると、-1を返す処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKの時刻取得関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > srand = 乱数の種を設定する
    strftime = 時刻を文字列に変換する(Gawk, mawk32専用)
    +
    systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk, mawk32専用)
    ツール。systime関数とsrand関数の戻り値予想(Unix time)
(2010年6月23日追加。戻り値の内容はAWKの仕様外)