名前 | 形式 | 機能説明 | 戻り値 | 使用法 | 使用例 | 属性 | 関連項目
#include <time.h>
extern int getdate_err;struct tm *getdate(const char *string);
getdate() 関数は、string がポイントするユーザー定義の日付または時刻 (またはその両方) の書式指定を、tm 構造体に変換します。この構造体宣言は <time.h> ヘッダーにあります。
ユーザーが作成したテンプレートは、入力文字列を構文解析して翻訳するときに使用されます。このテンプレートはテキストファイルで、DATEMSK 環境変数を介して識別されます。テンプレートの各行は、strftime(3C) や strptime(3C) が使用する変換仕様と同様な変換仕様を用いて、受け入れ可能な日または時間 (またはその両方) の指定を表します。1902 年よりも前、または 2037 年よりも後の日付は正しくありません。入力指定と一致するテンプレートの最初の行は、内部時間形式への解釈および変換に使用されます。
以下の変換仕様がサポートされています。
% と同じ
ロケール固有の、省略形式の曜日名
ロケール固有の、完全形式の曜日名
ロケール固有の、省略形式の月名
ロケール固有の、完全形式の月名
ロケール固有の、日時の表現
世紀の値 (0 から 99)。先行する 0 の指定は任意。どの世紀を指定していても %y 指示子を指定せずに使用すると、この形式は現在の年をオフセットで想定する。1902 年から 2037 年の間でのみ有効
日 (1 から 31)。先行する 0 の指定は任意
%m/%d/%y 形式で表した日付
%d と同じ
ロケール固有の、省略形式の月名
24 時間表示で表した時 (0 から 23)。先行する 0 の指定は任意
12 時間表示で表した時 (1 から 12)。先行する 0 の指定は任意
年の通算日 (1 から 366)。先行する 0 の指定は任意
月を示す数値 (1から 12)。先行する 0 の指定は任意
分 (0 から 59)。先行する 0 の指定は任意
空白
ロケール固有の、午前または午後を表す値
%p を伴った、12 時間表示形式で表した時刻
%H:%M 形式で表した時刻
秒 (0 から 61)。先行する 0 の指定は任意。値の範囲が (00 から 59) ではなく (00 から 61) であるのは、うるう秒および 二重うるう秒に対処するため
空白
%H:%M:%S 形式で表した時刻
その年の何週目かを表す数値 (0 から 53)。週は日曜日から始まるとする。先行する 0 の指定は任意
曜日を表す番号 (0 から 6)。日曜日が 0
その年の何週目かを表す数値 (0 から 53)。週は月曜日から始まるとする。先行する 0 の指定は任意
ロケール固有の適切な日付の表現
ロケール固有の適切な時刻の表現
西暦年の下 2 桁。世紀が特に指定されていない場合、69 から 99 の範囲の値は 20 世紀の西暦年 (1969 年から 1999 年まで) を表す。00 から 68 の範囲の値は 21 世紀の西暦年 (2000 年から 2068 年まで) を表す
西暦年の完全表示 (たとえば 1993)
時間帯名 (時間帯がない場合には文字なし)
上記の変換仕様に対して、変更を表す文字 E または O を付加することができます。これにより、代替形式または代替指定で値を得ることが可能です。希望した代替形式または代替指定が現ロケール中に存在していなければ、変更を示す文字を指定しなかった場合の形式で値が得られます。
ロケール固有の、適切な日付および時刻の代替形式
ロケール固有の、代替表示形式として指定されている年号
ロケール固有の、日付の代替表示形式
ロケール固有の、時刻の代替表示形式
ロケール固有の、代替表示形式として指定されている年号 (%EC) に対応した年
完全形式の代替年表示
日をロケール固有の代替数値記号で表す。先行する 0 の指定は任意
%Od と同じ
24 時間表示での時をロケール固有の代替数値記号で表す
12 時間表示での時をロケール固有の代替数値記号で表す
月をロケール固有の代替数値記号で表す
分をロケール固有の代替数値記号で表す
秒をロケール固有の代替数値記号で表す
その年の何週目かをロケール固有の代替数値記号で表す。週は日曜日から始まることとする
曜日を示す値をロケール固有の代替数値記号で表す。日曜日を 0 とする
その年の何週目かをロケール固有の代替数値記号で表す。週は月曜日から始まるとする
ロケール固有の代替表示の年 (%C に対応) の値を、ロケール固有の代替数値記号で表す
以下の規則は入力指定を内部形式に変換する場合に適用されます。
曜日だけが指定されている場合、指定した曜日が現在の曜日ならば今日であると見なし、指定した曜日が現在の曜日よりも前であれば来週であると見なします。
月だけが指定されている場合、指定した月が現在月ならば今月であると見なし、指定した月が現在の月よりも前で年が指定されていなければ 来年であると見なします (日が指定されていない場合には、月の第 1 日目であると見なします)。
世紀が指定されている場合でその世紀の範囲内の年が指定されていない場合、現在の年はその世紀の範囲内であると見なします。
時間、分、および秒が指定されていない場合は、現在の時間、分、および秒であると見なします。
日付が指定されていない場合、指定した時間が現在時間よりも大きければ今日であると見なし、指定した時間が現在の時間よりも小さければ明日であると見なします。
通常の文字を使った変換仕様は、次の文字をバッファから検索することにより実行されます。検索した文字が変換仕様を構成する文字と異なっていると、変換仕様は誤りとなり、その異なった文字以降の文字は 検索されません。
一連の変換仕様が %n、%t、空白、またはそれらの組み合わせで記述されている場合、空白でない文字が見つかるまで (その文字は読み込まれない) またはすべての文字を検索し終わるまで、検索が行われます。
それ以外の変換仕様の場合には、次の変換仕様が見つかるまで、またはすべての文字を検索し終わるまで、検索が行われます。検索して読み込まれた文字群 (次の検索指定文字は含まれない) は、変換仕様に対応したロケール値と対応付けられます。一致するロケール値があれば、該当する tm 構造体メンバーの値はロケール情報に対応した値に設定されます。一致するロケール値がなければ、getdate() の実行は失敗となり、文字検索は中止されます。
月や曜日の名前、年号、代替数値記号は、大文字と小文字を任意に組み合わせることができます。またユーザーは、setlocale(3C) を使って LC_TIME カテゴリを設定することにより、日付や時刻の指定に特定の言語を使用するように指定することができます。
正常終了の場合、getdate() は、tm 構造体にポインタを返します。そうでない場合は、NULL を返し、広域変数 getdate_err を設定してエラーを示します。getdate() に続く呼び出しは、getdate_err の中身を変更します。
以下は、getdate_err 設定とその意味です。
DATEMSK 環境変数が NULL または未定義です
読み取り時に、テンプレートファイルをオープンできません
ファイルの状態情報が得られませんでした
テンプレートファイルは通常ファイルではありません
テンプレートファイルの読み取り中にエラーが検出されました
malloc() 関数が失敗に終わりました (メモリー不足です)
テンプレートには入力と一致する行がありません
入力の指定が正しくありません (たとえば、February 31)
getdate() は ctype(3C) に定義されているマクロを明示的に利用します。
%m %A %B %d %Y, %H:%M:%S %A %B %m/%d/%y %I %p %d,%m,%Y %H:%M at %A the %dst of %B in %Y run job at %I %p,%B %dnd %A den %d. %B %Y %H.%M Uhr
以下に上記テンプレートの有効な入力指定の使用例を示します。
getdate("10/1/87 4 PM") getdate("Friday") getdate("Friday September 19 1987, 10:30:30") getdate("24,9,1986 10:30") getdate("at monday the 1st of december in 1986") getdate("run job at 3 PM, december 2nd")
LANG 環境変数が de (ドイツ語の環境) に設定されている場合には、以下の例が有効になります。
getdate("freitag den 10. oktober 1986 10.30 Uhr")
ローカル日時の指定もサポートされています。以下の使用例では、テンプレートにおいて ローカル日付指定の定義方法を示しています。
呼び出し | テンプレートにおける行 |
getdate("11/27/86") | %m/%d/%y |
getdate("27.11.86") | %d.%m.%y |
getdate("86-11-27") | %y-%m-%d |
getdate("Friday 12:00:00") | %A %H:%M:%S |
以下の使用例では、内部形式変換の規則を示しています。現在の日付は Mon Sep 22 12:19:47 EDT 1986 であり、LANG 環境変数は設定されていないとします。
入力 | テンプレートにおける行 | 日付 | |||||
Mon | %a | Mon | Sep | 22 | 12:19:48 | EDT | 1986 |
Sun | %a | Sun | Sep | 28 | 12:19:49 | EDT | 1986 |
Fri | %a | Fri | Sep | 26 | 12:19:49 | EDT | 1986 |
September | %B | Mon | Sep | 1 | 12:19:49 | EDT | 1986 |
January | %B | Thu | Jan | 1 | 12:19:49 | EST | 1987 |
December | %B | Mon | Dec | 1 | 12:19:49 | EST | 1986 |
Sep Mon | %b %a | Mon | Sep | 1 | 12:19:50 | EDT | 1986 |
Jan Fri | %b %a | Fri | Jan | 2 | 12:19:50 | EST | 1987 |
Dec Mon | %b %a | Mon | Dec | 1 | 12:19:50 | EST | 1986 |
Jan Wed 1989 | %b %a %Y | Wed | Jan | 4 | 12:19:51 | EST | 1989 |
Fri 9 | %a %H | Fri | Sep | 26 | 09:00:00 | EDT | 1986 |
Feb 10:30 | %b %H:%S | Sun | Feb | 1 | 10:00:30 | EST | 1987 |
10:30 | %H:%M | Tue | Sep | 23 | 10:30:00 | EDT | 1986 |
13:30 | %H:%M | Mon | Sep | 22 | 13:30:00 | EDT | 1986 |
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
MT レベル | MT-Safe |
CSI | 対応済み |
ctype(3C), setlocale(3C), strftime(3C), strptime(3C), attributes(5), environ(5)