前のページ|次のページ

SASでのタイムゾーンの指定

定義

夏時間(DST)
また サマータイムとも呼ばれます。 夏時間(DST) 夏の日の長い時期に時計を1時間繰り上げて夕方の日照を有効に利用し、秋には元に戻すという方法です。北半球のDSTは3月と4月の間に始まり、9月から11月の間に終了します。北半球の標準時間は9月から11月の間に始まり、3月と4月の間に終了します。南半球のDSTは9月から11月の間に始まり、3月と4月の間に終了します。南半球の標準時間は3月と4月の間に始まり、9月から11月の間に終了します。北半球の多くの国では、夏時間を採用しています。夏時間は、すべての国で採用されているわけではありません。
ローカル時間
TIMEZONE=システムオプションが設定されなかった場合に使用されるタイムゾーンのローカル時間。
タイムゾーン
同一の標準時間を使用する地球上のエリア。ローカル時間とも呼ばれます。タイムゾーンには、政治的な境界や地理的な境界があり、地域住民の便宜を考慮して調整される場合があります。インドや中国などのように、地理的に大きな国で1つのタイムゾーンを使用している国もあれば、ロシアやUSなどのように、複数のタイムゾーンを持つ国もあります。
タイムゾーンID
フォワードスラッシュ(/)で区切られた地域とエリア。Asia/Tokyoは、タイムゾーンIDの1つです。タイムゾーンIDはJavaタイムゾーンと互換性があります。タイムゾーンIDの一覧については、タイムゾーンIDとタイムゾーン名を参照してください。
タイムゾーン名
タイムゾーンを示す3文字または4文字を指定します。タイムゾーン名の一覧については、タイムゾーンIDとタイムゾーン名を参照してください。
タイムゾーンオフセット
+|-hh:mmまたは+|-hhmmという形式で示した、協定世界時(UTC)からタイムゾーンまでの時差。
ユーザーのローカル時間
TIMEZONE=システムオプションで指定されたタイムゾーンのローカル時間。
協定世界時(UTC)
基準子午線(英国のグリニッジ付近)の時間。UTCは、ISO 8601基本形式yyyymmddThhmmss+|-hhmm、またはISO 8601拡張形式yyyy-mm-ddThh:mm:ss+|-hh:mmが使用された日時値です。

SASでのタイムゾーンについて

SAS日時値は、ローカル時間の1960年1月1日00:00:00から経過秒数です。たとえば、英国における1960年1月1日00:00:00のSAS日時値は0です。日本における1960年1月1日00:00:00のSAS日時値も同様に0になります。英国と日本の間には9時間の時差があります。同じ瞬間の時刻であれば、この日時値は英国と日本の両方で0にはできません。絶対時間と日時値に対応するために、SASはUTC日付値と、タイムゾーンの時間値および日時値をサポートしています。
タイムゾーンの指定には、タイムゾーンIDまたはタイムゾーン名を使用できます。タイムゾーンIDは、地域/エリアという形式で地域とエリアを指定します。America/New_Yorkは、タイムゾーンIDの1つです。タイムゾーン名は、タイムゾーンを指定します。東部標準時間(Eastern Standard Time)に使用されるESTは、タイムゾーン名の1つです。タイムゾーンがDSTに切り替わるとき、DSTには別のタイムゾーン名が用意されています。PSTは太平洋標準時間です。PDTは太平洋夏時間です。EETは東欧時間です。EESTは東欧夏時間です。タイムゾーンIDの指定時、SASによってDSTかどうかが決定されます。地域/エリアが標準時間または夏時間であるかをユーザーが判断する必要はありません。ゾーンIDとタイムゾーン名のリストについては、タイムゾーンIDとタイムゾーン名を参照してください。
タイムゾーンを指定すると、データセットやSASカタログの作成または変更時にタイムゾーン固有のタイムスタンプをデータセットやSASカタログに追加します。また、タイムゾーン固有のタイムスタンプは、SASの起動時にはSASログに追加され、実行時には出力に追加されます。SASタイムスタンプ定数は、ISO 8601標準のタイムスタンプを指定する際に使用できます。次に、SASタイムスタンプ定数を使用したタイムスタンプを示します。
tstamp='2013-05-17T09:15:30–05:00'dt;
SASタイムスタンプ定数を指定すると、現在のタイムゾーンとタイムゾーンオフセットを考慮して、タイムスタンプがローカル日時値に変換されます。
タイムゾーンの設定は、TIME( )関数、TODAY( )関数、DATE( )関数、DATETIME( )関数に影響します。タイムゾーンが設定されると、日付値と日時値はそのタイムゾーンの値になります。

タイムゾーン処理のタスクとSAS言語要素

タイムゾーンの設定

タイムゾーンの設定には、TIMEZONE=システムオプションを使用します。
options timezone='asia/tokyo';
このオプション値には、タイムゾーン名またはタイムゾーンIDを使用します。値は引用符で囲みます。タイムゾーン名とタイムゾーンIDについては、タイムゾーンIDとタイムゾーン名を参照してください。詳細については、TIMEZONE=システムオプションを参照してください。

タイムゾーンIDオフセットの特定

TZONEOFF( )関数を使用して、タイムゾーン名またはタイムゾーンIDのオフセットを特定します。
  • TZONEOFF()関数は、現在のタイムゾーンのタイムゾーンオフセットを返します。
  • TZONEOFF('time-zone-id') 関数は、 'time-zone-id'のタイムゾーンオフセットを返します。
このプログラムは、現在のタイムゾーン(EST)と東京のタイムゾーンのオフセットを返します。
data _null_;
   o1=tzoneoff();
   o2=tzoneoff('asia/tokyo');
   put o1 time.;
   put o2 time.;
run;
SASログの出力は次のようになります。
-5:00:00 9:00:00
2つのタイムゾーン間の時差を特定するために、ABS( )関数を使用できます。
diff=abs(tzoneoff('america/new_york') - tzoneoff('asia/tokyo'));
詳細については、TZONEOFF関数を参照してください。

タイムゾーンIDまたはタイムゾーン名の特定

次の関数を使用して、タイムゾーン名またはタイムゾーンIDを特定します。
  • TZONEID( )関数は現在のタイムゾーンIDを返します。
  • TZONENAME( )関数は、タイムゾーンIDとSAS日時値の両方、またはSAS日時値のみに基づいて、現在のタイムゾーン名を返します。
次に、関数の使用例を示します。2013年3月10日はDSTの開始日です。
options timezone='America/Chicago';
data _null_;
   tzid=tzoneid();
   put 'Current time zone is ' tzid;
   tzn=tzonename('america/los_angeles');
   put 'Time zone for Los Angeles: ' tzn;
   tznST=tzonename('america/los_angeles','10mar2013:01:00:00'dt);
   put 'Time zone for Los Angeles standard time: ' tznST;
   tznDT=tzonename('america/los_angeles','10mar2013:02:00:00'dt);
   put 'Time zone for Los Angeles daylight time: ' tznDT;
   tznSDT=tzonename('10mar2013:02:00:00'dt);
   put 'Time zone name for this SAS datetime: ' tznSDT;
run;
出力は次のようになります。
Current time zone is AMERICA/CHICAGO Time zone for Los Angeles:PST Time zone for Los Angeles standard time:PST Time zone for Los Angeles daylight time:PDT Time zone name for this SAS datetime:CDT
詳細については、TZONEID関数およびTZONENAME関数を参照してください。

SASとUTC間での日時値の変換

次の関数を使用して、SAS日時値をUTC日時値へ、UTC日時値をSAS日時値へ変換します。
  • TZONES2U( )は、SAS日時値をUTC日時値へ変換します。
  • TZONEU2S( )関数は、UTC日時値をSAS日時値へ変換します。
次に、関数の使用例を示します。
options timezone='est';
data _null_;
   put ' The time zone is EST';
   diff=abs(tzoneoff('america/new_york') - tzoneoff('europe/london'));
   put ' New York-London difference:' diff time.;
   diff=abs(tzoneoff('america/new_york') - tzoneoff('asia/tokyo'));
   put ' New York-Tokyo difference:' diff time.;
   put ' The SAS datetime is 2013-03-15T09:15:00+00:00 ';
   put ' ';
   put ' Change a SAS datetime to a UTC value ';
   put ' ';
   put ' The time zone offset +00:00 is for London ';
   put ' Subtract the 5 hours for the EST time zone offset'; 
   stu1=tzones2u('2013-03-15T09:15:00+00:00'dt);
   put ' STU1 Using E8601DX:' stu1 e8601dx.;
   put ' ';
   put ' 2013-03-15 9:15 AM in Tokyo is 2013-03-14 7:15 PM in New York'; 
   put ' Subtract the 5 hours for the EST time zone offset'; 
   stu2=tzones2u('2013-03-15T09:15:00+00:00'dt, 'Asia/Tokyo');
   put ' STU2 Using E8601DX:' stu2 e8601dx.;
   put ' ';
   put ' Change a UTC to a SAS datetime value. ';
   put ' ';
   put ' +00:00 is the time zone offset for London.';
   put ' Subtract the 5 hours for the EST time zone offset'; 
   uts1=tzoneu2s('2013-03-15T09:15:00+00:00'dt);
   put ' UTS1 Using DATETIME:' uts1 datetime.;
   put ' ';
   put ' 9:15:00+00:00 is 18:15:00 in Tokyo. ';
   put ' Subtract the 5 hours for the EST time zone offset'; 
   uts2=tzoneu2s('2013-03-15T09:15:00+00:00'dt, 'Asia/Tokyo');
   put ' UTS2 Using DATETIME:' uts2 datetime.;
run;
出力は次のようになります。
The time zone is EST New York-London difference:5:00:00 New York-Tokyo difference:14:00:00 The SAS datetime is 2013-03-15T09:15:00+00:00 Change a SAS datetime to a UTC value The time zone offset +00:00 is for London Subtract the 5 hours for the EST time zone offset STU1 Using E8601DX:2013-03-15T04:15:00-05:00 2013-03-15 9:15 AM in Tokyo is 2013-03-14 7:15 PM in New York Subtract the 5 hours for the EST time zone offset STU2 Using E8601DX:2013-03-14T14:15:00-05:00 Change a UTC to a SAS datetime value.+00:00 is the time zone offset for London.Subtract the 5 hours for the EST time zone offset UTS1 Using DATETIME:14MAR13:23:15:00 9:15:00+00:00 is 18:15:00 in Tokyo.Subtract the 5 hours for the EST time zone offset UTS2 Using DATETIME:15MAR13:13:15:00
詳細については、TZONES2U関数を参照してください。

タイムゾーンに基づいたISO 8601表記の時間値と日時値の書き込み

これらの出力形式では、ISO 8601基本表記と拡張表記の時間値と日時値を書き出します。時間、UTCオフセット、またはその両方が、TIMEZONE=システムオプションの値に基づきます。
  • B8601TX.およびE8601TX.出力形式では、UTC時間値をユーザーのローカル時間に変換し、その時間値をタイムゾーンオフセットを使用して書き出します。
  • B8601DX.およびE8601DX.出力形式では、UTC日時値をユーザーのローカル時間に変換し、その日時値をタイムゾーンオフセットを使用して書き出します。
  • B8601LX.およびE8601LX.出力形式では、ユーザーのローカルタイムゾーンのUTCオフセットを使用して、ローカル日時値を書き出します。
このプログラムは、タイムゾーンIDのAustralia/Sydneyに基づき、時間値と日時値をフォーマットします。
options timezone='Australia/Sydney';
data _null_;
   st='18:33:40't;
   sdt='2013-03-17T14:30:22+00:00'dt;
   put 'Time B8601TX:' st b8601tx.;
   put 'Time E8601TX:' st e8601tx.;
   put 'UTC B8601DX:' sdt b8601dx.;
   put 'UTC E8601DX:' sdt e8601dx.;
   put 'UTC B8601LX:' sdt b8601lx.;
   put 'UTC E8601LX:' sdt e8601lx.;
run;
出力は次のようになります。
Time B8601TX:   043340+1000 Time E8601TX:04:33:40+10:00 UTC B8601DX:      20130318T123022+1100 UTC E8601DX:2013-03-18T12:30:22+11:00 UTC B8601LX:      20130318T013022+1100 UTC E8601LX:2013-03-18T01:30:22+11:00

タイムゾーンオフセットを使用したSAS日時値の書き出し

次の出力形式では、TIMEZONE=システムオプションの値に基づき、UTCオフセットを使用してSAS日時値を書き出します。
  • NLDATMZ.出力形式では、SAS日時値をddmmmyyyy:hh:mm:ss +|-hhmm形式で書き出します。
  • NLDATMTZ.出力形式では、SAS時間値をhh:mm:ss +|-hhmm形式で書き出します。
  • NLDATMWZ.出力形式では、SAS日時値から週の曜日、月、日、年、午前|午後の部分を、day-of-week, month-name dd, yyyy AM|PM +hhmm形式で書き出します。
このプログラムは、タイムゾーンオフセットを使用して、SAS時間と日時値をフォーマットします。
options timezone='Indian/Maldives';
data _null_;
   st='18:33:40't;
   sdt='2013-03-17T14:30:22+00:00'dt;
   put 'Time NLDATMTZ:' st nldatmtz.;
   put 'SAS datetime NLDATMZ:' sdt nldatmz.;
   put 'SAS datetime NLDATMWZ:' sdt nldatmwz.;
run;
出力は次のようになります。
Time NLDATMTZ:18:33:40 +0500 SAS datetime NLDATMZ:17Mar2013:19:30:22 +0500 SAS datetime NLDATMWZ:Sunday, March 17, 2013 07:30:22 PM +0500
詳細については、NLDATMTZw.出力形式NLDATMZw.出力形式、およびNLDATMWZw.出力形式を参照してください。

タイムゾーンの例

この例では、ロサンジェルスから東京までのフライトの到着時間を使用します。
/* Set the time zone */
options timezone='America/Los_Angeles';
data depart;
/* Set the departure time */
   depart='2013-05-17T09:15:00-08:00'dt;
   put 'Depart Los Angeles: ' depart nldatmwz.;
/* Set the flight time */
   ftime='13:00't;
   put 'Flight time=' ftime time.;
   utc=depart+ftime;
   put 'Arrive PST=' utc nldatmwz.;
   put 'Arrive UTC=' utc nldatmwz.;
run;
/* Set the time zone for Tokyo */
options timezone='Asia/Tokyo';
data arrive;
   set depart;
   put 'Arrive in Tokyo ' utc nldatmwz.;
run;
出力は次のようになります。
39 /* Set the time zone */ 40 options timezone='America/Los_Angeles'; 41 data depart; 42 /* Set the departure time */ 43 depart='2013-05-17T09:15:00-08:00'dt; 44 put 'Depart Los Angeles:' depart nldatmwz.; 45   /* Set the flight time */ 46      ftime='13:00't; 47      put 'Flight time=' ftime time.; 48      utc=depart+ftime; 49      put 'Arrive PST=' utc nldatmwz.; 50      put 'Arrive UTC=' utc nldatmwz.; 51   run; Depart Los Angeles:Friday, May 17, 2013 10:15:00 AM -0700 Flight time=13:00:00 Arrive PST=Friday, May 17, 2013 11:15:00 PM -0700 Arrive UTC=Friday, May 17, 2013 11:15:00 PM -0700 NOTE:The data set WORK.DEPART has 1 observations and 3 variables.NOTE:DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds 52 /* Set the time zone for Tokyo */ 53 options timezone='Asia/Tokyo'; 54 data arrive; 55 set depart; 56 put 'Arrive in Tokyo ' utc nldatmwz.; 57 run; Arrive in Tokyo Friday, May 17, 2013 11:15:00 PM +0900 NOTE:There were 1 observations read from the data set WORK.DEPART.NOTE:The data set WORK.ARRIVE has 1 observations and 3 variables.NOTE:DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds
前のページ|次のページ|ページの先頭へ