2018年9月4日火曜日

PROC DS2でタイムゾーン関係の処理をする「TZパッケージ」



DS2プロシジャの「TZパッケージ」でタイムゾーン関係の処理ができます
アメリカとかだとタイムゾーンが地域によって違うから、パッケージ化するほどの需要あるんですかね。



以下は簡単な例です。

 proc ds2;
 data _null_;
    method init();
       dcl package tz t();
       dcl double utc tokyo having format nldatm20.;
       dcl double tokyo_offset having format time8.;

       /* UTC timeを取得 */
       utc = t.getutctime();
 
       /* Local timeを取得 */
       tokyo = t.getlocaltime('Asia/Tokyo');

       /* Offsetを取得 */
       tokyo_offset = t.getoffset('Asia/Tokyo');

       put utc=;
       put tokyo=;
       put tokyo_offset=;

    end;
 enddata;
 run;
 quit;

ログ
 utc=2018/09/04 11:56:47
 tokyo=2018/09/04 20:56:47
 tokyo_offset= 9:00:00


メソッドの中で「’Asia/Tokyo’」というように地域を指定していますが、タイムゾーンIDといって、「SAS timezone id」とかググれば地域ごとのタイムゾーンIDが載ってるSASのリファレンスが出てくるはずです。

あとは構文自体も大したことないんで、詳細はリファレンスを見てみてください。




とりあえず私は業務で使う事ないんで、暇つぶし用のプログラムを書いて遊んでます。

 proc ds2;
 data _null_;
    method init();
       dcl package tz t();
       dcl double tokyo newyork honolulu vancouver having format nldatm20.;

       tokyo         = t.getlocaltime('Asia/Tokyo');
       newyork    = t.getlocaltime('America/New_York');
       honolulu    = t.getlocaltime('Pacific/Honolulu');
       vancouver = t.getlocaltime('America/Vancouver');

       put tokyo=;
       put newyork=;
       put honolulu=;
       put vancouver=;

    end;

 enddata;
 run;
 quit;

ログ
 tokyo=2018/09/04 20:51:00 
 newyork=2018/09/04 07:51:00
 honolulu=2018/09/04 01:51:00
 vancouver=2018/09/04 04:51:00


適当な地域の現在時刻を調べて「あーニューヨーカーは今頃寝てるのか、いやむしろ寝てないのかな」とか妄想するために使うものだと思っています。
一応、夏時間も考慮されているっぽい(夏時間が存在する地域でちゃんと夏時間の日時になってたんで)




0 件のコメント:

コメントを投稿