|
%V |
|
ISO 8601 形 式
で の 年 の 始 め
か ら の 週 番 号
(「 注 意 」 の 節
を 参 照 )。 10 進 数
表 記 で 、 01 か ら 53
の 値 と な る 。
週 番 号 は 、 新
し い 年 が 少 な
く と も 4 日 以 上
含 ま れ る 最 初
の 週 を 1 と し て
計 算 す る 。 %U
と %W も 参 照 の
こ と 。 (SU)
週 の 何
番 目 の 日 (10 進 数
表 記 ) か 。 日 曜
日 を 0 と す る 。
(0−6)。 %u も 参 照
。 (SU)
年 の 初
め か ら の 通 算
の 週 番 号 (10 進 数
表 記 ) (00−53)。 そ の
年 の 最 初 の 月
曜 日 を 、 第 1 週
の 始 ま り と し
て 計 算 す る 。
%x
現 在 の
ロ ケ ー ル で 一
般 的 な 日 付 表
記 。 時 刻 は 含
ま な い 。
|
|
|
|
%X 現 在 の ロ ケ
ー ル で 一 般 的
な 時 刻 表 記 。
日 付 は 含 ま な
い 。 |
|
|
%y 西 暦 の 下 |
|
2桁 (世 紀
部 分 を 含 ま な
い 年 ) (00−99)。
|
%Y 世 紀
部 分 を 含 め た |
|
( 4 桁 の ) 西
暦 年 。 |
|
|
%z |
|
|
|
+hhmm
や −hhmm の 形 式
の タ イ ム ゾ ー
ン (UTC へ の オ フ セ
ッ ト 時 間 )。 (SU)
|
%Z タ イ
ム ゾ ー ン 名 ま
た は 省 略 名 。 |
|
|
%+ |
|
date(1)
形 式 で の 日 時
。 (TZ) (glibc2 で は サ ポ
ー ト さ れ て い
な い )
い く つ
か の 変 換 指 定
で は 、 変 換 指
定 文 字 の 前 に
E や O 「 修 飾
子 」 を 置 く こ
と に よ っ て 別
書 式 を 使 用 す
る よ う に 指 定
す る こ と が で
き る 。 現 在 の
ロ ケ ー ル に お
い て 別 書 式 が
存 在 し な い 場
合 に は 、 通 常
の 変 換 指 定 が
使 用 さ れ た か
の よ う に 動 作
す る (SU)。 統 一 UNIX
規 格 (Single UNIX Specification) で
は %Ec, %EC, %Ex, %EX,
%Ey, %EY, %Od, %Oe, %OH,
%OI, %Om, %OM, %OS, %Ou,
%OU, %OV, %Ow, %OW, %Oy,
に つ い て 記 述
が あ る 。 こ こ
で O 修 飾 子 は
別 形 式 の 数 値
(ロ ー マ 数 字 と
か ) を 指 定 す る
た め に 使 用 す
る 。 E 修 飾 子
は ロ ケ ー ル 依
存 の 別 表 現 を
指 定 す る の に
使 用 す る 。 (訳
注 : E 修 飾 子 は
日 本 で 使 用 さ
れ て い る 「 昭
和 」 「 平 成 」
な ど の 元 号 に
よ る 年 表 記 を
指 定 す る 。 glibc 2.2
以 降 で の み 有
効 ) 要 素 別 の 時
刻 構 造 体 tm の
詳 細 は <time.h> に
定 義 さ れ て い
る 。 ctime(3) も 参 照
す る こ と 。
終 端 の
ヌ ル バ イ ト を
含 め た 結 果 の
文 字 列 の 長 さ
が max バ イ ト を
超 え な か っ た
場 合 、 strftime() 関
数 は 配 列 s に
格 納 さ れ た バ
イ ト 数 を 返 す
(こ の バ イ ト 数
に 終 端 の ヌ ル
バ イ ト は 含 ま
れ な い )。 終 端
の ヌ ル バ イ ト
を 含 め た 結 果
の 文 字 列 の 長
さ が max バ イ ト
を 超 え る 場 合
に は 、 strftime() は 0
を 返 し 、 配 列
の 内 容 は 不 定
と な る 。 返 り
値 0 は 必 ず し も
エ ラ ー を 意 味
し て い る 訳 で
は な い の で 注
意 す る こ と 。
例 え ば 、 多 く
の ロ ケ ー ル で
は %p は 空 文 字
列 を 返 す 。 同
様 に 、 空 の format
文 字 列 は 空 文
字 列 を 返 す 。
環 境 変
数 TZ と LC_TIME が 使
用 さ れ る 。 (訳
注 : LC_ALL が 設 定 さ
れ て い る 場 合
に は LC_TIME よ り も
そ ち ら が 優 先
さ れ る 。 LC_TIME も
LC_ALL も 設 定 さ れ
て い な い 場 合
に は LANG が 使 用
さ れ る 。 )
SVr4, C89, C99.
個 々 の 変 換 が
厳 密 に ど の 規
格 に 含 ま れ る
か は 、 ANSI C (印 な
し )、 統 一 UNIX 規 格
(SU印 )、 Olson の timezone パ
ッ ケ ー ジ (TZ印 )、
glibc 独 自 (GNU印 ) で 示
し て い る 。 glibc2 で
は %+ は サ ポ ー
ト さ れ て い な
い が 、 い く つ
か の 拡 張 が 行
わ れ て い る 。
POSIX.1 で は ANSI C の み を
参 照 し て い る
。 POSIX.2 の date(1) の と
こ ろ に 記 述 さ
れ て い る 幾 つ
か の 拡 張 は
strftime() に も 適 用
で き る だ ろ う
。 %F 変 換 は C99 と
POSIX.1−2001 に あ る 。
SUSv2 で
は 、 %S は 00 か ら 61
の 範 囲 を と る
と 規 定 さ れ て
い る 。 こ れ は
、 1分 間 の う ち
閏 秒 が 2つ 入 る
可 能 性 が 理 論
的 に は あ る こ
と を 考 慮 し て
の も の で あ る
(実 際 に は 、 こ
の よ う な 状 況
は こ れ ま で 一
度 も 起 こ っ て
い な い )。
ISO 8601
の 週 ・ 曜 日 表
記 (Week Dates)
%G, %g, %V は 、 ISO 8601
標 準 に よ り 定
義 さ れ た 週 単
位 表 記 の 年 に
よ り 計 算 さ れ
る 値 を 出 力 す
る 。 ISO 8601 標 準 の
週 単 位 表 記 で
は 、 週 は 月 曜
日 か ら 開 始 さ
れ 、 週 番 号 は
、 年 の 最 初 の
週 が 01 と な り 、
最 後 の 週 は 52 か 53
と な る 。 週 01 は
、 新 し い 年 が 4
日 以 上 含 ま れ
る 最 初 の 週 で
あ る 。 言 い 換
え る と 、 週 01 は
、 そ の 年 の 木
曜 日 を 含 む 最
初 の 週 、 つ ま
り 1 月 4 日 を 含 む
週 と い う こ と
で あ る 。 新 し
い 年 の カ レ ン
ダ ー 上 の 最 初
の 週 に 新 し い
年 が 3 日 以 下 し
か 含 ま れ な い
場 合 、 ISO 8601 の 週
単 位 表 記 で は
、 こ れ ら の 日
を 前 の 年 の 週 53
の 一 部 と み な
す 。 例 え ば 、 2010
年 1 月 1 日 は 金 曜
日 で あ り 、 そ
の 週 に は 2010 年 の
日 が 3 日 し か 含
ま れ な い 。 し
た が っ て 、 ISO 8601
の 週 単 位 表 記
で は 、 こ れ ら
の 日 は 2009 年 (%G)
の 週 53 (%V) の 一 部
と な る 。 ISO 8601 の
2010 年 の 週 01 は 2010 年 1
月 4 日 の 月 曜 日
か ら 始 ま る 。
glibc
で の 注 意
glibc で は 変 換 指 定
に い く つ か 拡
張 を 行 っ て い
る (こ れ ら の 拡
張 は POSIX.1−2001 に は
規 定 さ れ て い
な い が 、 他 の
い く つ か の シ
ス テ ム で 同 様
の 機 能 が 提 供
さ れ て い る )。 '%'
文 字 と 変 換 指
定 文 字 の 間 に
、 オ プ シ ョ ン
と し て flag と フ
ィ ー ル ド の 幅
を 指 定 で き る
(こ れ ら を 指 定
す る 場 合 に は
E や O 修 飾 子
の 前 に 置 く )。
以 下 の フ ラ グ
文 字 が 使 用 で
き る :
|
_ |
|
(下 線 ) 数
値 の 結 果 文 字
列 の パ デ ィ ン
グ (穴 埋 め ) を ス
ペ ー ス (空 白 文
字 ) で 行 う 。 |
|
− |
|
(ダ ッ シ ュ ) 数 値
の 結 果 文 字 列
に 対 す る パ デ
ィ ン グ を 行 わ
な い 。
変 換 指
定 文 字 が デ フ
ォ ル ト で は ス
ペ ー ス で パ デ
ィ ン グ を 行 う
場 合 で も 、 数
値 の 結 果 文 字
列 へ の パ デ ィ
ン グ を 0 で 行 う
。
^ 結 果 文 字 列 中
の ア ル フ ァ ベ
ッ ト 文 字 を
大 文 字
に 変 換 す る 。
|
|
|
|
|
# 結 果 文 字 列
の 大 文 字 ・ 小
文 字 を 入 れ 替
え る |
|
(こ の フ ラ グ は
特 定 の 変 換 指 |
定 文 字
で し か 機 能 し
な い 。 そ の 中
で も 本 当 に 有
用 な の は %Z の
場 合 だ け で あ
る )。 オ プ シ ョ
ン の 10進 数 の 幅
指 定 子 は フ ラ
グ の 後 ろ に 置
く こ と が で き
る (フ ラ グ は な
く て も よ い )。
フ ィ ー ル ド の
本 来 の 大 き さ
が 指 定 さ れ た
幅 よ り も 小 さ
い 場 合 、 結 果
文 字 列 の 左 側
は 指 定 さ れ た
幅 ま で パ デ ィ
ン グ さ れ る 。
出 力 文
字 列 が max バ イ
ト を 超 え て し
ま う 場 合 、 errno
は 設 定 「 さ れ
な い 」 。 こ の
た め 、 こ の エ
ラ ー を 、 format 文
字 列 が き ち ん
と 処 理 さ れ て
長 さ 0 の 出 力 文
字 列 が 生 成 さ
れ る 場 合 を 区
別 す る こ と が
で き な い 。
POSIX.1−2001 で は strftime()
で errno に 設 定 す
る 値 に つ い て
一 切 規 定 し て
「 い な い 」 。
gcc(1)
の い く つ か の
バ ー ジ ョ ン に
は お か し な と
こ ろ が あ り 、
%c の 使 用 法 に
つ い て 以 下 の
よ う な 警 告 を
出 す : warning: ’%c’ yields only
last 2 digits of year in some locales (警
告 :い く つ か の
ロ ケ ー ル で は
’%c’は 年 の 下
2桁 し か 出 力 し
な い )。 も ち
ろ ん プ ロ グ ラ
マ が %c を 使 う
の は お 薦 め で
き る こ と で あ
る 。 %c を 使 う
と 適 切 な 日 付
と 時 刻 の 表 記
を 得 る こ と が
で き る か ら で
あ る 。 gcc(1) の こ
の 問 題 を 回 避
し よ う と す る
と 、 何 か す っ
き り し な い 気
分 に な る だ ろ
う 。 比 較 的 き
れ い な 解 決 方
法 は 以 下 の よ
う な 中 間 関 数
を 追 加 す る こ
と で あ る 。
size_t
my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
{
return strftime(s, max, fmt, tm); } 現 在
で は 、 gcc(1) は こ
の 警 告 を 抑 え
る た め の
−Wno−format−y2k オ プ
シ ョ ン を 提 供
し て お り 、 上
記 の 回 避 策 は
も は や 必 要 な
い 。
RFC 2822
準 拠 の 日 付 形
式 (%a と %b は 英 語
ロ ケ ー ル )
"%a, %d %b %Y %T %z"
RFC 822
準 拠 の 日 付 形
式 (%a と %b は 英 語
ロ ケ ー ル )
"%a, %d %b %y %T %z"
サ ン プ ル プ ロ
グ ラ ム 以 下 の
プ ロ グ ラ ム を
使 う と strftime() の
実 験 が で き る
。 以 下 に 、
strftime() の glibc 実 装 が
生 成 す る 結 果
の 例 を い く つ
か 示 す :
$ ./a.out
'%m'
Result string is "11"
$ ./a.out '%5m'
Result string is "00011"
$ ./a.out '%_5m'
Result string is " 11" プ ロ
グ ラ ム の ソ ー
ス
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
char outstr[200];
time_t t;
struct tm *tmp;
t = time(NULL);
tmp = localtime(&t);
if (tmp == NULL) {
perror("localtime");
exit(EXIT_FAILURE); }
if
(strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
fprintf(stderr, "strftime returned 0");
exit(EXIT_FAILURE); }
printf("Result
string is \"%s\"\n", outstr);
exit(EXIT_SUCCESS); }
date(1),
time(2), ctime(3), setlocale(3),
sprintf(3), strptime(3)
こ の man ペ
ー ジ は Linux man−pages
プ ロ ジ ェ ク ト
の リ リ ー ス 3.79 の
一 部 で あ る 。
プ ロ ジ ェ ク ト
の 説 明 と バ グ
報 告 に 関 す る
情 報 は
http://www.kernel.org/doc/man−pages/ に 書
か れ て い る 。
| |