2010年6月11日金曜日

systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk, mawk32専用) - AWK

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

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


**** 書式
--------
systime()
--------

o この関数は、Gawkとmawk32の拡張機能です。
o 戻り値 -- 基準時刻からの経過秒数(= Unix time)
   + 通常、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数。但し、閏秒は数えません。
   + 通常、と書いたのは、AWKの仕様では無いからです。他の数え方をするシステムもあるかもしれません。


**** 使用例
--------
BEGIN {
print systime(); # systimeは整数で返します。
print strftime("%Y/%m/%d %H:%M:%S", systime()); # 文字列にしたい時
}
--------

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


**** 機能
o 現在の時刻値(= Unix time = 基準時刻からの経過秒数)を調べます。
   + ▽Gawkの公式説明(= 英語です)によると、「POSIXシステムの場合(= 通常)、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数です。但し、閏秒は数えません。他のシステムでは違うかもしれません」となっていました。
   + ▽Windowsシステムでも同様です。閏秒は数えません。
   + 但し、UNIXで閏秒を有効にしている場合、経過秒数の計算方法について確認する必要があります。
o 戻り値は、整数です。読み易い文字列に変換したい時には、strftimeを使います。
o この関数をサポートしていない処理系があります。


**** メモ
o srandを2回呼ぶ事でも、同じ値を取得する事が出来ます。(= 多分、非公式動作)
o この関数は、AWKのコンパイル環境によっては、2038年問題を抱えています。
   + 2038年1月19日の途中で、正確に時刻を示さなくなる問題です。
   + それまでに、AWKプログラムを、2038年問題の対策版に入れ替える必要があります。
o 過去の日付を計算で求める時は、閏年の実装についても確認します。
   + Web検索した限りでは、(過去や未来の)閏年の計算ミスをしているシステムが、毎回発覚していました。


**** 確認した処理系
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
    ▼制作メモ
    > mktime = 特定日時の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk専用)
    srand = 乱数の種を設定する
    strftime = 時刻を文字列に変換する(Gawk, mawk32専用)
    +
    ツール。systime関数とsrand関数の戻り値予想(Unix time)
(2010年6月23日追加。戻り値の内容はAWKの仕様外)