名前 | 形式 | 機能説明 | 戻り値 | 使用法 | 使用例 | 属性 | 関連項目
#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 年よりも後の日付は正しくありません。入力指定と一致するテンプレートの最初の行は、内部時間形式への解釈および変換に使用されます。
以下の変換仕様がサポートされています。
% と同じ
省略形式の曜日名 (ロケール固有)
完全形式の曜日名 (ロケール固有)
省略形式の月名 (ロケール固有)
完全形式の月名 (ロケール固有)
日時の表現 (ロケール固有)
世紀 (年を 100 で割った数値。1 から 99 までの 10 進数で表わされる。小数点以下は切り捨てられる)。1 桁の数値には、10 の位として 0 を指定する。standards(5) を参照してください。どの世紀を指定していても %y 指示子を指定せずに使用すると、現在の年を想定する。1902 年から 2037 年の間でのみ有効
日 (1 から 31)。10 の位を示す 0 の指定は任意
%m/%d/%y 形式で表した日付
%d と同じ
省略形式の月名 (ロケール固有)
24 時間表示で表した時 (0 から 23)。10 の位を示す 0 の指定は任意
12 時間表示で表した時 (1 から 12)。10 の位を示す 0 の指定は任意
年の通算日 (1 から 366)。10 の位を示す 0 の指定は任意
月を示す数値 (1から 12)。10 の位を示す 0 の指定は任意
分 (0 から 59)。10 の位を示す 0 の指定は任意
空白
午前または午後を表す値 (ロケール固有)
12 時間表示形式で表した時刻。%p を伴う
%H:%M 形式で表した時刻
秒 (0 から 61)。10 の位を示す 0 の指定は任意。値の範囲が (00 から 59) ではなく (00 から 61) であるのは、うるう秒および二重うるう秒に対処するため
空白
%H:%M:%S 形式で表した時刻
その年の何週目かを表す数値 (0 から 53)。週は日曜日から始まるとする。10 の位を示す 0 の指定は任意
曜日を表す番号 (0 から 6)。日曜日が 0
その年の何週目かを表す数値 (0 から 53)。週は月曜日から始まるとする。10 の位を示す 0 の指定は任意
ロケール固有の適切な日付の表現
ロケール固有の適切な時刻の表現
西暦年の下 2 桁。世紀が特に指定されていない場合、69 から 99 の範囲の値は 20 世紀の西暦年 (1969 年から 1999 年まで) を表す。00 から 68 の範囲の値は 21 世紀の西暦年 (2000 年から 2068 年まで) を表す
西暦年の完全表示 (たとえば 1993)
時間帯名 (時間帯がない場合には文字なし)
上記の変換仕様に、変更を表す文字 E または O を付加すると、代替形式または代替指定で値を得ることができます。希望した代替形式または代替指定が現ロケール中に存在していなければ、変更を示す文字を指定しなかった場合の形式で値が得られます。
適切な日付および時刻の代替形式 (ロケール固有)
代替表示形式として指定されている年号 (ロケール固有)
日付の代替表示形式 (ロケール固有)
時刻の代替表示形式 (ロケール固有)
代替表示形式として指定されている年号 (%EC) に対応した年 (ロケール固有)
完全形式の代替年表示
日をロケール固有の代替数値記号で表す。10 の位を示す 0 の指定は任意
%Od と同じ
24 時間表示の時をロケール固有の代替数値記号で表す
12 時間表示の時をロケール固有の代替数値記号で表す
月をロケール固有の代替数値記号で表す
分をロケール固有の代替数値記号で表す
秒をロケール固有の代替数値記号で表す
その年の何週目かをロケール固有の代替数値記号で表す。週は日曜日から始まるとする
曜日を示す値をロケール固有の代替数値記号で表す。日曜日を 0 とする
その年の何週目かをロケール固有の代替数値記号で表す。週は月曜日から始まるとする
ロケール固有の代替表示の年 (%C に対応) の値を、ロケール固有の代替数値記号で表す
以下の規則は入力指定を内部形式に変換する場合に適用されます。
曜日だけが指定されている場合、指定した曜日が現在の曜日ならば今日であると見なし、指定した曜日が現在の曜日よりも前であれば来週であると見なします。
月だけが指定されている場合、指定した月が現在月ならば今月であると見なし、指定した月が現在の月よりも前で年が指定されていなければ 来年であると見なします (日が指定されていない場合は、月の第 1 日目であると見なします)。
年だけが指定されている場合、返される tm 構造体のメンバー tm_mon、 tm_mday、 tm_yday、 tm_wday、 tm_isdst の値は指定されません。
世紀が指定されているが、その世紀の範囲内の年が指定されていない場合、現在の年はその世紀の範囲内であると見なします。
時間、分、秒が指定されていない場合、現在の時間、分、秒であると見なします。
日付が指定されていない場合、指定した時間が現在時間よりも大きければ今日であると見なし、指定した時間が現在の時間よりも小さければ明日であると見なします。
通常の文字を使った変換仕様は、次の文字をバッファから検索することにより実行されます。検索した文字が変換仕様を構成する文字と異なっていると、変換仕様は誤りとなり、その文字以降は検索されません。
一連の変換仕様が %n、%t、空白、またはそれらの組み合わせで記述されている場合、空白でない文字が見つかるまで (その文字は読み込まれない)、またはすべての文字を検索し終わるまで、検索が行われます。
それ以外の変換仕様の場合には、次の変換仕様に一致する文字が見つかるまで、またはすべての文字を検索し終わるまで、検索が行われます。検索して読み込まれた文字群 (次の変換仕様に一致する文字は含まない) は、変換仕様に対応したロケール値と対応付けられます。一致するロケール値があれば、該当する tm 構造体メンバーの値がロケール情報に対応した値に設定されます。一致するロケール値がなければ、getdate() の実行は失敗し、文字検索は中止されます。
月や曜日の名前、年号、代替数値記号には、大文字と小文字を任意に組み合わせることができます。また、setlocale(3C) を使って LC_TIME カテゴリを設定することにより、日付や時刻の指定に特定の言語を使用するように指定できます。
正常終了の場合、getdate() は、tm 構造体にポインタを返します。そうでない場合は NULL を返し、エラーを示す大域変数 getdate_err を設定します。getdate_err の内容は、getdate() 以降の呼び出しによって変更されます。
次に、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 | 対応済み |