|
%V |
|
ISO 8601:1988 形 式
で の 年 の 始 め
か ら の 週 数 (10 進
数 表 記 ) (00-53)。 そ
の 年 に 少 な く
と も 4 日 以 上 含
ま れ る 最 初 の
週 を 1 と し て 計
算 す る 。 週 の
始 ま り は 月 曜
日 と す る 。 %U
と %W も 参 照 す
る こ と 。
週 の 何
番 目 の 日 (10 進 数
表 記 ) か 。 日 曜
日 を 0 と す る 。
(0-6)。 %u も 参 照 。
(SU)
年 の 初
め か ら の 通 算
の 週 数 (10 進 数 表
記 ) (00-53)。 そ の 年
の 最 初 の 月 曜
日 を 、 第 1 週 の
始 ま り と し て
計 算 す る 。
%x
現 在 の
ロ ケ ー ル で 一
般 的 な 日 付 表
記 。 時 刻 は 含
ま な い 。
|
|
|
|
%X 現 在 の ロ ケ
ー ル で 一 般 的
な 時 刻 表 記 。
日 付 は 含 ま な
い 。 |
|
|
%y 西 暦 の 下 |
|
2桁 (世 紀
部 分 を 含 ま な
い 年 ) (00-99)。
|
%Y 世 紀
部 分 を 含 め た |
( 4 桁 の ) 西
暦 年 。 |
|
%z タ イ ム ゾ ー
ン の |
GMT へ の オ フ セ
ッ ト 時 間 。 RFC 822
形 式 の 日 時 に
必 要 |
で あ る
。
("%a, %d %b %Y %H:%M:%S %z"
と し て 使 用 す
る )。 (GNU)
|
%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) も 参 照
す る こ と 。
strftime()
関 数 は 文 字 列
s に 格 納 さ れ
た 文 字 数 を 返
す 。 こ の 文 字
数 に 終 端 の NULL バ
イ ト は 含 ま な
い 。 終 端 の NULL バ
イ ト を 格 納 で
き る だ け の 大
き さ を 持 っ た
文 字 列 を 渡 す
こ と 。 そ れ 以
外 の 場 合 は 0 を
返 し 、 文 字 列
の 内 容 は 修 正
さ れ な い 。 (libc 4.4.4
以 降 で こ の 挙
動 が 適 用 さ れ
て い る 。 libc 4.4.1 な
ど の 非 常 に 古
い バ ー ジ ョ ン
の libc で は 文 字 列
が 短 か 過 ぎ た
場 合 に は max が
返 さ れ る 。 ) 返
り 値 0 は 必 ず し
も エ ラ ー を 意
味 し て い る 訳
で は な い の で
注 意 す る こ と
。 例 え ば 、 多
く の ロ ケ ー ル
で は %p は 空 文
字 列 を 返 す 。
環 境 変
数 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つ 入 る
可 能 性 が 理 論
的 に は あ る こ
と を 考 慮 し て
の も の で あ る
(実 際 に は 、 こ
の よ う な 状 況
は こ れ ま で 一
度 も 起 こ っ て
い な い )。
glibc
で の 注 意
glibc で は 変 換 指 定
に い く つ か 拡
張 を 行 っ て い
る (こ れ ら の 拡
張 は POSIX.1-2001 に は 規
定 さ れ て い な
い が 、 他 の い
く つ か の シ ス
テ ム で 同 様 の
機 能 が 提 供 さ
れ て い る )。 '%' 文
字 と 変 換 指 定
文 字 の 間 に 、
オ プ シ ョ ン と
し て flag と フ ィ
ー ル ド の 幅 を
指 定 で き る (こ
れ ら を 指 定 す
る 場 合 に は E
や O 修 飾 子 の
前 に 置 く )。 以
下 の フ ラ グ 文
字 が 使 用 で き
る :
|
_ |
|
(下 線 ) 数
値 の 結 果 文 字
列 の パ デ ィ ン
グ (穴 埋 め ) を ス
ペ ー ス (空 白 文
字 ) で 行 う 。 |
|
− |
|
(ダ ッ シ ュ ) 数 値
の 結 果 文 字 列
に 対 す る パ デ
ィ ン グ を 行 わ
な い 。
変 換 指
定 文 字 が デ フ
ォ ル ト で は ス
ペ ー ス で パ デ
ィ ン グ を 行 う
場 合 で も 、 数
値 の 結 果 文 字
列 へ の パ デ ィ
ン グ を 0 で 行 う
。
^ 結 果 文 字 列 中
の ア ル フ ァ ベ
ッ ト 文 字 を
大 文 字
に 変 換 す る 。
|
|
|
|
|
# 結 果 文 字 列
の 大 文 字 ・ 小
文 字 を 入 れ 替
え る |
|
(こ の フ ラ グ は
特 定 の 変 換 指 |
定 文 字
で し か 機 能 し
な い 。 そ の 中
で も 本 当 に 有
用 な の は %Z の
場 合 だ け で あ
る )。 オ プ シ ョ
ン の 10進 数 の 幅
指 定 子 は フ ラ
グ の 後 ろ に 置
く こ と が で き
る (フ ラ グ は な
く て も よ い )。
フ ィ ー ル ド の
本 来 の 大 き さ
が 指 定 さ れ た
幅 よ り も 小 さ
い 場 合 、 結 果
文 字 列 の 左 側
は 指 定 さ れ た
幅 ま で パ デ ィ
ン グ さ れ る 。
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 オ プ
シ ョ ン を 提 供
し て お り 、 上
記 の 回 避 策 は
も は や 必 要 な
い 。
以 下 の
プ ロ グ ラ ム を
使 う と 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]; 以 下 に 、
strftime() の
glibc 実 装 が 生 成 す
る 結 果 の 例 を
い く つ か 示 す :
$ ./a.out
"%m"
Result string is "11"
$ ./a.out "%5m"
Result string is "00011"
$ ./a.out "%_5m"
Result string is " 11"
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); } /* main */
date(1),
time(2), ctime(3), setlocale(3),
sprintf(3), strptime(3)
| |