ISO 8601規格の間隔を日時値とデュレーション値に変換します。または、日時値とデュレーション値をISO 8601規格の間隔に変換します。
カテゴリ: | 日付と時間 |
日付、日時とデュレーション、デュレーション、間隔値など、変換元を示すキーワードを一重引用符で囲んで指定します。convert-fromは次のいずれかの値を取ることができます。
日付値を指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
日時値を指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
変換元の値が日時/日時値であることを指定します。
変換元の値が日時/デュレーション値であることを指定します。
変換元の値がデュレーション値であることを指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
変換元の値がデュレーション/日時値であることを指定します。
変換元の値が間隔値であることを指定します。
変換の結果を示すキーワードを一重引用符で囲んで指定します。convert-toは次のいずれかの値を取ることができます。
日付値を指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
日時値を指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
日時/日時間隔の作成を指定します。
日時/デュレーションの間隔の作成を指定します。
デュレーションの作成を指定します。このとき、nは1から6までの値です。デフォルト値は、1です。nはfrom-variables引数またはto-variables引数のコンポーネント数です。有効なコンポーネントは次のとおりです。
デュレーション/日時間隔の作成を指定します。
間隔値の終了日時またはデュレーションの終了の作成を指定します。
間隔値の作成を指定します。
間隔値の開始日時またはデュレーションの開始の作成を指定します。
変換元の値を含む1つまたは2つの変数を指定します。間隔値の変数を1つ指定し、日時値およびデュレーション値に1つずつ(計2つ)の変数を指定します。日時値とデュレーション値は間隔のコンポーネントで、1番目の値は間隔の開始値を示し、2番目の値は間隔の終了値を示します。
要件 | 整数変数は、少なくとも16バイトの文字変数である必要があります。この変数の値は$N8601Bw.d入力形式または$N8601Ew.d入力形式で読み込まれます。整数変数は、CALL IS8601_CONVERTルーチンを呼び出して返される整数値の場合もあります。 |
日時値は、SAS日時値であるか、あるいは$N8601Bw.d入力形式または$N8601Ew.d入力形式、もしくはCALL IS8601_CONVERTルーチンの呼び出しによって値が読み込まれる8バイトの文字値である必要があります。 | |
デュレーション値は、デュレーションを秒数で表す数値であるか、あるいは$N8601Bw.d入力形式または$N8601Ew.d入力形式、もしくはCALL IS8601_CONVERTルーチンの呼び出しによって値が読み込まれる8バイトの文字値である必要があります。 |
変換値を含む1つまたは2つの変数を指定します。間隔値の変数を1つ指定し、日時値およびデュレーション値に1つずつ(計2つ)の変数を指定します。
要件 | 整数変数は、少なくとも16バイトの文字変数である必要があります。 |
ヒント | 日時変数およびデュレーション変数は数値または文字になります。数値の精度を維持するには、数値変数の長さは少なくとも8文字である必要があります。日時およびデュレーションの文字変数は、少なくとも16バイトである必要があります。変数長よりも短い値には空白文字が埋め込まれます。 |
月、日または時間のコンポーネントが間隔値、日時値またはデュレーション値で省略されているときに使用する日付または時間のコンポーネント値を指定します。date-time-replacements引数にはカンマで区切られた一連の数字を指定し、その数字が年、月、日、時、分、秒の順でコンポーネントを表します。date-time-replacementsのコンポーネントは、後方から、秒、分、時、日、月、年の順で省略できます。代入値が指定されていない場合は、デフォルト値を使用して変換が実行されます。
デフォルト | 日付コンポーネントおよび時間コンポーネントが省略された場合のデフォルト値は次のとおりです。
|
||||||||||
要件 | 年コンポーネントは日時値またはデュレーション値の一部である必要があります。したがって、date-time-replacementsには使用できません。date-time-replacementsでは、年のプレースホルダとしてカンマを使用する必要があります。たとえば、置換値文字列 ,9,4,,2,' で1番目のカンマは年の値のプレースホルダです。
|
'dt/du'
で提供されます。2つの日付値が、出力として期待されるデュレーションに提供される場合、第1引数は'dt/dt'
になります。
data _null_; /* Declare variable length and type. Character datetime and duration */ /* values must be at least 16 characters. To avoid losing precision, */ /* the numeric datetime value has a length of 8. */ length dtN duN 8 dtC duC $16 intervalC $32; /* Assign a numeric datetime value and a character duration value. */ dtN='15Sep2011:09:00:00'dt; duC=input('P2y3m4dT5h6m7s', $n8601b.); put dtN=; put duC=; /* Create an interval from a datetime and duration value and format the */ /* interval using the ISO 8601 extended notation for character values. */ call is8601_convert('dt/du', 'intvl', dtN, duC, intervalC); put '** Character interval created from datetime and duration values **/'; put intervalC $n8601e.; put ' '; /* Create numeric datetime and duration values from an interval and */ /* format the values using the ISO 8601 extended notation for numeric */ /* values. */ call is8601_convert('intvl', 'dt/du', intervalC, dtN, duN); put '** Character datetime and duration created from an interval **/'; put dtN=; put duN=; put ' '; /* Assign a new datetime value with omitted components. */ dtC=input('2012---15T10:-:-', $n8601b.); put '** This datetime is a character value. **'; put dtC $n8601h.; put ' '; /* Create an interval by reading a datetime value that has omitted date */ /* and time components. Use replacement values for the month, minutes, */ /* and seconds. */ call is8601_convert('du/dt', 'intvl', duC, dtC, intervalC, , 7, , , 35, 45); put '** Interval created using a datetime with omitted values, **'; put '** inserting replacement values for month (7), minute (35) **'; put '** seconds (45). **'; put intervalC $n8601e.; put ' '; run;
dtN=1631696400 duC=0002304050607FFC ** Character interval created from datetime and duration values **/ 2011-09-15T09:00:00.000/P2Y3M4DT5H6M7S ** Character datetime and duration created from an interval **/ dtN=1631696400 duN=71211967 ** This datetime is a character value.** 2012---15T10:-:- ** Interval created using a datetime with omitted values, ** ** inserting replacement values for month (7), minute (35) ** ** seconds (45). ** P2Y3M4DT5H6M7S/2012-07-15T10:35:45
data _null_; length mynew $32; x='P8w'; y='11feb2012:12:35:22'dt; call is8601_convert('du/dt', 'intvl', x, y, mynew); put mynew=$n8601e.; run;
mynew=P8W/2012-02-11T12:35:22.000
data temp; length dt $32; x='P6w'; y='11feb2012:11:13:22'dt; call is8601_convert('du/dt', 'start', x, y, dt); put dt=$n8601e.; run;
dt=2011-12-31T00:00:00.000
data _null_; infile datalines; input mo d yr hour min sec; length mynew $32; x='P8w'; call is8601_convert('du/dt6', 'intvl', x, mo, d, yr, hour, min, sec, mynew); put mynew=$n8601e.; datalines; 02 22 2011 10 30 45 12 13 2010 12 35 25 03 26 2010 10 10 10 ; run;
mynew=P8W/0002-14-91T10:30:45.000 mynew=P8W/0012-13-90T12:35:25.000 mynew=P8W/0003-14-90T10:10:10.000
data temp; input y mo d h min s; length mynew $16; /* This value is the duration. */ x='P2w'; /* This CALL routine uses the date and time values that are */ /* listed in the data lines to create a DATETIME value. */ call is8601_convert('dt6', 'dt', y, mo, d, h, min, s, dt); put dt=datetime.; /* This CALL routine uses the DATETIME value that was previously */ /* created. */ call is8601_convert('du/dt', 'start', x, dt, mynew); put mynew=$n8601e.; datalines; 2011 6 7 10 15 20 2011 12 5 10 25 45 2011 6 30 10 32 20 ;
dt=07JUN11:10:15:20 mynew=2011-05-24T00:00:00.000 dt=05DEC11:10:25:45 mynew=2011-11-21T00:00:00.000 dt=30JUN11:10:32:20 mynew=2011-06-16T00:00:00.000
data a; x='P8w'; call is8601_convert('du', 'du', x, mynew); put mynew=time8.; run;
data a; length mynew $32; x='P8w'; y='11feb2012:12:22'dt; call is8601_convert('du/dt', 'intvl', x, y, mynew); put mynew=$n8601e.; run;
NOTE: Invalid argument to function IS8601_CONVERT('du/dt','intvl',1644582120, 'P8w',''[12 of 32 characters shown]) at line 770 column 9. mynew=************************************************** mynew= x=P8w y=1644582120 _ERROR_=1 _N_=1
data a; length mynew $16; /* If you omit the LENGTH statement, replace the PUT statement */ /* with 'put mynew datetime22.;'. */ x='P8w'; y='11feb2012:12:22'dt; call is8601_convert('du/dt', 'start', x, y, mynew); put mynew=$n8601e.; run;
start
を使用します。
data _null_; x='1271:59:00'; time=input(x, time10.); length dur $16; call is8601_convert('du', 'du', time, dur); put dur=$n8601e.; run;
data a; length dur $16; start='02apr2012:12:30:22'dt; end='08apr2012:14:32:22'dt; call is8601_convert('dt/dt', 'du', start, end, dur); put dur=$n8601e.; run;
data _null_; length Final2 $16; int=input('2012-03-15T14:32:00/2012-03-29T09:45:00', $n8601e40.); call is8601_convert('intvl', 'dt/du', int, Final1, Final2); put Final1= / Final2=$n8601e.; run;
call is8601_convert('intvl', 'dt/du', int, Final1, Final2, , 2);