付録E 日付/時刻フォーマットの仕様
日付/時刻フィールドの解析は、Unix strptime() 標準 C ライブラリ関数の使用によりサポートされています。
strptime() 関数は strftime() の逆関数です。format で指定されたフォーマットを使用して、s によって指定された文字列を、tm で指定された tm 構造体内の値に変換します。format は、フィールドの説明およびテキスト文字列で構成される、scanf(3) と似た文字列です。各フィールド記述子は % 文字と、後続のフィールド記述子の置換を指定する別の文字で構成されています。format ストリング内のその他の文字列はすべて、入力ストリング内の特定の文字とマッチしている必要があります。ただし、スペース文字は例外的に入力ストリング内のゼロ個以上のスペース文字とマッチします。
strptime() 関数は入力ストリングを左から右に処理します。有効な 3つの入力要素(スペース文字、リテラル、またはフォーマット)は 1 つずつ処理されます。入力をフォーマット ストリングとマッチングできない場合は、関数が停止します。フォーマットおよび入力ストリングの残りの部分は処理されません。
次に、サポートされている入力フィールド記述子の一覧を示します。テキスト ストリング(曜日や月名など)をマッチングする場合は、大文字と小文字が区別されます。数値をマッチングする場合、先行ゼロは許可されますが、省略できます。
%%
% 文字
%a または %A
現在のロケールに従う曜日の名前(省略形または完全名)
%b または %B または %h
現在のロケールに従う月の名前(省略形または完全名)
%c
現在のロケールの日付および時刻表示
%C
世紀を示す値(0 〜 99)
%d または %e
月の日付(1 〜 31)
%D
%m/%d/%y と同じ(米国式の日付。特に欧州では %d/%m/%y が広く使用されているため、米国以外では混乱を招くことがあります)。ISO 8601 標準フォーマットは %Y-%m-%d です)。
%H
時間(0 〜 23)
%I
12 時間制の時間(1 〜 12)
%j
年の通算日(1 〜 366)
%m
月(1 〜 12)
%M
分(0 〜 59)
%n または %t
任意のスペース文字
%p
AM または PM に相当するロケール固有の文字(注:何も表示されないことがあります)
%r
12 時間制の時間(ロケールの AM または PM を使用)。POSIX ロケールでは、%I:%M:%S %p と同等です。現在のロケールの LC_TIME 部分で t_fmt_ampm が空の場合、動作は不定です。
%R
%H:%M と同様
%S
秒(0 〜 60。うるう秒の場合は、60 になることがあります。以前は 61 も許可されていました)
%T
%H:%M:%S と同等
%U
日曜を週の先頭とする週番号(0 〜 53)。1 月の最初の日曜が第 1 週の最初の日になります。
%w
日曜を 0 とする曜日番号(0 〜 6)
%W
月曜を週の先頭とする週番号(0 〜 53)。1 月の最初の月曜が第 1 週の最初の日になります。
%x
ロケールの日付フォーマットに従う日付
%X
ロケールの時刻フォーマットに従う時刻
%y
世紀の年(0 〜 99)。世紀を指定しない場合、69 〜 99 の値は 20 世紀の年(1969 〜 1999)を表します。00 〜 68 の値は 21 世紀の年(2000 〜 2068)を表します。
%Y
世紀を含む年(例:1991)
一部のフィールド記述子は、E または O 修飾文字で修飾して、代替フォーマットまたは代替仕様を使用するように指定できます。現在のロケールに代替フォーマットまたは代替仕様がない場合は、修飾されていないフィールド記述子が使用されます。
E 修飾子を付加すると、入力ストリングに、ロケールに依存する代替バージョンの日付/時刻表示を含めることができます。
%Ec
ロケール固有の代替日付/時刻表示
%EC
ロケール固有の代替表示の基準年(期間)の名前
%Ex
ロケール固有の代替日付表示
%EX
ロケール固有の代替時刻表示
%Ey
ロケール固有の代替表示における、%EC からのオフセット(年のみ)
%EY
完全な代替年表示
O 修飾子を付加した場合は、数値入力をロケールに依存する代替フォーマットで指定できます。
%Od または %Oe
ロケール固有の代替数値記号を使用した月の日付。先行ゼロは許可されますが、省略できます。
%OH
ロケール固有の代替数値記号を使用した時間(24 時間制)
%OI
ロケール固有の代替数値記号を使用した時間(12 時間制)
%Om
ロケール固有の代替数値記号を使用した月
%OM
ロケール固有の代替数値記号を使用した分
%OS
ロケール固有の代替数値記号を使用した秒
%OU
ロケール固有の代替数値記号を使用した年の週番号(日曜が週の先頭)
%Ow
ロケール固有の代替数値記号を使用した曜日番号(日曜が 0)
%OW
ロケール固有の代替数値記号を使用した年の週番号(月曜が週の先頭)
%Oy
ロケール固有の代替数値記号を使用した年(%C からのオフセット)
%F
%Y-%m-%d と同等(ISO 8601 日付フォーマット)
%g
ISO 週番号に対応する、世紀を除いた年(0 〜 99)
%G
ISO 週番号に対応した年(例:1991)
%u
10 進数で表した曜日(1 〜 7、月曜 = 1)
%V
10 進数で表した ISO 8601:1988 の週番号(1 〜 53)。1 月 1 日を含む週(月曜が先頭)に新年の日付が 4 日以上含まれる場合は、その週が第 1 週になります。それ以外の場合は、この週が前年の最終週となり、次の週が第 1 週になります。
%z
RFC-822/ISO 8601 標準の時間帯仕様
%Z
時間帯名
同様に、strftime の GNU 拡張により、%k を %H の同義語、%l を %I の同義語、%P を %p の同義語として使用できます。
%s
1970-01-01 00:00:00 UTC(世界標準時)以降の秒数。うるう秒がサポートされていない場合、うるう秒はカウントされません。
