名前
getdate - 文字列を tm 構造体に変換する
書式
#define _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED #include <time.h>
struct tm *getdate(const char *string);
extern int getdate_err;
#define _GNU_SOURCE #include <time.h>
int getdate_r (const char *string, struct tm *res);
説明
getdate() 関数は、ポインタ string が指す文字列を tm 構造体に変換し、その構造体を返す。 この tm 構造体は静的なメモリ領域にあるので、 次の呼び出しが行われ、上書きされているかもしれない。
strptime(3) (format 引数を取る) とは対照的に、 getdate() はファイルに書いてあるフォーマットを用いる (このファイルのフルパスは DATEMSK 環境変数に与えられている)。
マッチの際には大文字小文字を区別しない。 パターン中でも変換される文字列中でも、余分な空白文字は無視される。
パターンに指定できる変換指定は、 strptime(3) のものと同じである。ただしひとつ変換指定が追加されている。
%Z | タイムゾーンの名前。 |
曜日だけが指定された場合は、 今日または今日以降で、 その曜日に合致する最初の日が採用される。
月だけが指定された場合 (年の指定はなし) は、 今月または今月以降で、 その月に合致する最初の月が採用される。
時・分・秒がいずれも指定されなかった場合は、 現在の時・分・秒が採用される。
日付の指定がなかったが、時間 (hour) だけ指定された場合は、 現在の時間またはそれ以降で、その指定に合致する最初の時間が採用される。
返り値
成功すると、この関数は struct tm へのポインタを返す。 失敗すると NULL を返し、グローバル変数 getdate_err を設定する。 errno を変更することは規定されていない。 getdate_err には以下の値が定義されている。
1 | DATEMASK 環境変数が空または未定義である。 |
2 | テンプレートファイルを読み込みオープンできない。 |
3 | ファイルステータスの情報が取得できない。 |
4 | テンプレートファイルが通常のファイルでない。 |
5 | テンプレートファイルの読み込み時にエラーが起こった。 |
6 | メモリの割り当てに失敗した (メモリが足りない)。 |
7 | 入力にマッチしたファイルに、行が含まれていない。 |
8 | 入力指定が正しくない。 |
環境変数
DATEMSK | |
書式パターンを含むファイル。 | |
TZ, LC_TIME | |
strptime(3) が用いる変数。 | |
準拠
POSIX.1-2001
注意
getdate() は getdate_err を用いているし、静的なバッファに結果を返すので、 リエントラントではない。 glibc では同じ機能を持つスレッドセーフな関数を提供している。 機能は同じである。結果はポインタ res が示すバッファに返され、 エラーが起こった場合には返り値がゼロ以外となり、これは上記に与えた getdate_err に対する値と同じものになる。
POSIX.1-2001 仕様における strptime(3) には、 %E や %O といった修正子を用いた変換指定が含まれている。 一方この仕様では getdate() の記述がない。glibc の実装では getdate() は strptime(3) を用いて実装されている。 よって自動的に全く同じ変換が両者でサポートされている。
glibc 実装では %Z 変換指定をサポートしていない。
関連項目
localtime(3), setlocale(3), strftime(3), strptime(3), time(3), feature_test_macros(7)