上一頁|下一頁

指定 SAS 中的時區

定義

日光節約時間
日光節約時間 (DST) 也稱為夏令時間,是一種為了更加善用傍晚的白天時間而訂定的方式,它會在白天較長的夏季將時鐘撥快一小時,到了秋天再恢復正常時間。 日光節約時間在北半球的開始時間介於三月到四月間,結束於九月到十一月間。標準時間在北半球的開始時間介於九月到十一月間,結束於三月到四月間。日光節約時間在南半球的開始時間介於九月到十一月間,結束於三月到四月間。 標準時間在南半球的開始時間介於三月到四月間,結束於九月到十一月間。北半球有許多國家/地區實施 DST 節約時間。DST 並非適用於所有國家/地區的標準。
當地時間
未以 TIMEZONE= 系統選項指定時區時的當地時間。
時區
地表上使用相同與標準時間的區域,通常稱為當地時間。時區具有政治與地理位置上的界線,並且可視當地人口的情況進行調整。有些面積較大的國家/地區 (例如印度與中國) 僅使用一個時區,而其他較大的國家/地區 (例如俄羅斯與美國) 則使用多個時區。
時區 ID
指定以斜線 ( / ) 分隔的地區與區域。Asia/Tokyo 是一個時區 ID。時區 ID 會與 Java 時區相容。如需時區 ID 清單,請參閱 時區 ID 與時區名稱
時區名稱
指定用以表示時區的三或四個字元。如需時區名稱清單,請參閱 時區 ID 與時區名稱
時區偏移
以 +|-hh:mm 或 +|-hhmm 的格式,指定一個時區與全球定位時間 (UTC) 之間的時間差距 (小時與分鐘數)。
使用者當地時間
以 TIMEZONE= 系統選項指定之時區的當地時間。
全球定位時間 (UTC)
是本初子午線上的時間,該位置在英格蘭的格林威治附近。UTC 是使用 ISO 8601 基本格式 yyyymmddThhmmss+|-hhmm 或 ISO 8601 延伸格式 yyyy-mm-ddThh:mm:ss+|-hh:mm 的日期時間值。

關於 SAS 中的時區

SAS 的日期時間值以秒為計算單位,開始於當地時間的 01Jan1960 00:00:00。 以英國為例,其 01Jan1960 00:00:00 的 SAS 日期時間值為 0。在日本,01Jan1960 00:00:00 的 SAS 日期時間值也是 0。但實際上英國與日本之間有九小時的時差。 在相同的時間點上,英國的日期時間與日本的日期時間不可皆為 0。為使用絕對的時間與日期時間值,SAS 支援在各時區使用 UTC 日期、時間和日期時間值。
您可以藉由指定時區 ID 或時區名稱的方式,來指定時區。時區 ID 會以地區/區域的格式指定地區與區域。 例如,America/New_York 即為時區 ID。時區名稱可指定時區。例如,東部標準時間的時區名稱為 EST。當特定的時區因日光節約時間或夏令時間而變更時間時,該替代的時間會有個別的時區名稱可使用。PST 是太平洋標準時間。 PDT 是太平洋日光節約時間。EET 是東歐時間。EEST 是東歐夏令時間。當您指定時區 ID 時,SAS 會使用日光節約時間或夏令時間規則決定時間。 您無須決定地區/區域是否使用替代時間。如需時區 ID 與時區名稱的清單,請參閱 時區 ID 與時區名稱
當您指定時區時,SAS 會將時區的特定時間戳記增加到資料集,而在建立或修改資料集或目錄時,則會增加到 SAS 目錄。此外,在 SAS 啟動時,會將時區的特定時間戳記增加到 SAS 日誌,在執行時則會增加到輸出。SAS 時間戳記常數可讓您使用 ISO 8601 標準來指定時間戳記。以下是使用 SAS 時間戳記常數的時間戳記:
tstamp='2013-05-17T09:15:30–05:00'dt;
當您指定 SAS 時間戳記常數時,SAS 會使用目前的時區與時區偏移,以將時間戳記轉換成當地的日期時間值。
時區設定會影響 TIME( ) 函數、TODAY( ) 函數、DATE( ) 函數與 DATETIME( ) 函數。在設定時區時,日期與日期時間值是使用目前時區。

時區處理所需的工作與 SAS 語言元素

設定時區

若要設定時區,請使用 TIMEZONE= 系統選項:
options timezone='asia/tokyo';
您可以使用時區名稱或時區 ID 作為選項的值。請將值包含在引號中。如需時區名稱與時區 ID,請參閱 時區 ID 與時區名稱 如需詳細資訊,請參閱 TIMEZONE= 系統選項

決定時區偏移

您可以使用 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
若要瞭解兩個時區之間的時差,您可以使用 ABS( ) 函數:
diff=abs(tzoneoff('america/new_york') - tzoneoff('asia/tokyo'));
如需詳細資訊,請參閱 TZONEOFF 函數

決定時區 ID 或時區名稱

使用下列函數,可決定時區名稱或時區 ID:
  • TZONEID( ) 函數會傳回目前時區 ID。
  • TZONENAME( ) 函數會根據時區 ID 與 SAS 日期時間值傳回目前時區名稱,或僅根據 SAS 日期時間值傳回此名稱。
以下是這些函數的使用範例。2013 年 3 月 10 日是日光節約時間的第一天。
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 Lost 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 Lost 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: ********+1100
Time E8601TX: ********+11:00
UTC B8601DX: 20130318T103022+1000
UTC E8601DX: 2013-03-18T10:30:22+10:00
UTC B8601LX: 20130318T003022+1000
UTC E8601LX: 2013-03-18T00:30:22+10:00

使用時區偏移寫入 SAS 日期時間值

這些格式會根據 TIMEZONE= 系統選項的值,使用 UTC 偏移寫入 SAS 日期時間值:
  • NLDATMZ. 格式會使用 ddmmmyyyy:hh:mm:ss +|-hhmm 的形式寫入 SAS 日期時間值。
  • NLDATMTZ. 格式會使用 hh:mm:ss +|-hhmm 的形式寫入 SAS 時間值。
  • NLDATMWZ. 格式會以 day-of-week, month-name dd, yyyy AM|PM +hhmm 的格式,將 SAS 日期時間值寫入為星期幾、月、日、年與 AM | PM。
此程式會使用時區偏移將 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

時區範例

此範例說明從洛杉磯飛往東京的航班的抵達時間:
/* 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

上一頁|下一頁|頁面頂端