strftime
strftime
在头文件 | | |
---|---|---|
size_t strftime(char * str,size_t count,const char * format,const struct tm * time); | | (直到C99) |
size_t strftime(char * restrict str,size_t count,const char * restrict format,const struct tm * restrict time); | | (自C99以来) |
根据格式字符串将日期和时间信息从给定日历时间转换time
为以空字符结尾的多字节str
字符串format
。最多count
写入字节。
参数
海峡 | - | 指向char数组的第一个元素的输出 |
---|---|---|
计数 | - | 最大写入字节数 |
格式 | - | 指向以空字符结尾的多字节字符串指定转换格式的指针。格式字符串由零个或多个转换说明符和普通字符(除%以外)组成。所有普通字符(包括终止空字符)都将被复制到输出字符串而不进行修改。每个转换规范都以%字符开头,可以选择后跟E或O修饰符(如果语言环境不支持,则忽略),后面跟着决定说明符行为的字符。以下格式说明符可用:转换说明符说明使用的字段%写入文字%。完整的转换规范必须是%%。n(C99)写入换行符t(C99)写入水平制表符年份Y以十进制数字写年,例如 在IS0 8601周内从星期一开始,每年的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四tm_year,tm_wday,tm_yday g(C99)写出ISO 8601以星期为基础的年份的最后2位数字,即包含指定周的年份(范围00,99)。在IS0 8601周内从星期一开始,并且一年中的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四tm_year,tm_wday,tm_yday月份b写出缩写月份名称,例如Oct(区域依赖)tm_mon h( C99)b的同义词tm_mon B写完整的月份名称,例如10月(取决于语言环境)tm_mon m将月份写为十进制数字(范围01,12)tm_mon Om(C99)使用替代数字系统写月 十二而不是12 ja_JP locale tm_mon周U写一年中的一周作为十进制数(星期日是一周的第一天)(范围00,53)tm_year,tm_wday,tm_yday OU(C99)写一年的周,如%U,使用替代数字系统,例如五十二,而不是ja_JP语言环境中的52,tm_year,tm_wday,tm_yday W将年份的星期写为十进制数(星期一是一周中的第一天)(范围00 ,53)tm_year,tm_wday,tm_yday OW(C99)使用替代数字系统(例如五十二而不是52)在ja_JP locale tm_year,tm_wday,tm_yday V(C99)中写入ISO一年中的8601周(范围01,53)。在IS0 8601周内从星期一开始,一年的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四tm_year,tm_wday,tm_yday OV(C99)写入年份的星期,如%V,使用替代数字系统,例如五十二,而不是ja_JP语言环境中的52,tm_year,tm_wday,tm_yday每年的月份/月份j作为十进制数字(范围001,366)写入一年中的某一天tm_yday d以十进制数字形式显示月份的日期(范围为01,31)tm_mday Od(C99)写入月份的零基日期使用替代数字系统,例如ja_JP语言环境中的二十七而不是23单个字符前面有一个空格。tm_mday e(C99)将月份中的某一天写为十进制数(范围为1,31)。单个数字前面有一个空格。tm_mday Oe(C99)使用替代数字系统编写一个月的一天,例如 二十七而不是ja_JP语言环境中的27单个字符前面有一个空格。tm_mday一周中的某天写一个缩写星期几名称,例如Fri(区域设置相关)tm_wday A写出完整的星期几名称,例如星期五(区域设置相关)tm_wday w写入星期几作为十进制数字,其中星期日为0(范围0-6)tm_wday Ow(C99)使用替代数字系统(例如ja_JP区域设置tm_wday u(C99)将工作日写为十进制数,其中星期一为1(ISO 8601格式)(范围1 -7)tm_wday Ou(C99)使用替代数字系统写入星期几,其中星期一为1,例如ja_JP语言环境中的二代替2代表tm_wday小时,分钟,秒H将小时数写为十进制数, |
转换说明符 | 说明 | 使用的字段 |
% | 写文字%。完整的转换规范必须是%%。 | |
N(C99) | 写换行符 | |
吨(C99) | 写水平制表符 | |
| 年份|
| Y | 将年份写为十进制数字,例如2017 | tm_year |
| EY(C99)| 在替代表示中写入年份,例如平成23年(平成23年)而不是2011年(2011年)在ja_JP地区| tm_year |
| y | 将年份的最后2位数字写为十进制数(范围为00,99)| tm_year |
| Oy(C99)| 使用替代数字系统写入年份的最后2位数字,例如ja_JP locale |中的十一而不是11 tm_year |
| Ey(C99)| 将年份写入与区域设置的替代日历期%EC(区域依赖)|的偏移量 tm_year |
| C(C99)| 写一年的前两位数作为十进制数(范围为00,99)| tm_year |
| EC(C99)| 在地区的替代表示中写入基准年(期间)的名称,例如平成(平成时代)in ja_JP | tm_year |
| G(C99)| 写ISO 8601以周为基础的年份,即包含指定周的年份。在IS0 8601周内从星期一开始,并且一年中的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四| tm_year,tm_wday,tm_yday |
| g(C99)| 写出ISO 8601以周为单位的年份的最后2位数字,即包含指定周的年份(范围00,99)。在IS0 8601周内从星期一开始,并且一年中的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四| tm_year,tm_wday,tm_yday |
| 月|
| b | 写出缩写的月份名称,例如Oct(区域依赖)| tm_mon |
| h(C99)| b |的同义词 tm_mon |
| B | 写完整的月份名称,例如10月(取决于语言环境)| tm_mon |
| m | 将月份作为十进制数字(范围为01,12)|写入 tm_mon |
| Om(C99)| 使用替代数字系统写月份,例如ja_JP locale |中的十二而不是12 tm_mon |
| 星期|
| U | 写一年中的一周作为十进制数(星期日是一周中的第一天)(范围00,53)| tm_year,tm_wday,tm_yday |
| OU(C99)| 写一年中的一周,如%U,使用替代数字系统,例如五十二而不是ja_JP语言环境中的52。tm_year,tm_wday,tm_yday |
| W | 写一年中的一周作为十进制数(星期一是一周中的第一天)(范围00,53)| tm_year,tm_wday,tm_yday |
| OW(C99)| 用%W写出一年中的第一周,使用替代数字系统,例如ja_JP语言环境中的五十二而不是52。tm_year,tm_wday,tm_yday |
| V(C99)| 写一年的ISO 8601周(范围01,53)。在IS0 8601周内从星期一开始,并且一年中的第一周必须满足以下要求:包括1月4日包括今年的第一个星期四| tm_year,tm_wday,tm_yday |
| OV(C99)| 写出一年中的一周,如%V所示,使用替代数字系统,例如ja_JP语言环境中的五十二而不是52。tm_year,tm_wday,tm_yday |
| 一年中的每月|
| j | 写一年中的一天作为十进制数(范围001,366)| tm_yday |
| d | 将月份的日期写为十进制数(范围为01,31)| tm_mday |
| Od(C99)| 使用替代数字系统写出从零开始的一天的日期,例如ja_JP语言环境中的二十七而不是23。单个字符前面有一个空格。| tm_mday |
| e(C99)| 将月份的日期写为十进制数(范围1,31)。单个数字前面有一个空格。| tm_mday |
| Oe(C99)| 使用替代数字系统写一个月的一天,例如ja_JP语言环境中的二十七而不是27。单个字符前面有一个空格。| tm_mday |
| 一周中的星期几|
| a | 写缩写的星期几名称,例如Fri(locale dependent)| tm_wday |
| A | 写完整的星期几名称,例如Friday(locale dependent)| tm_wday |
| w | 写星期几作为十进制数,星期日为0(范围0-6)| tm_wday |
| Ow(C99)| 写星期几,星期日为0,使用替代数字系统,例如ja_JP locale |中的二而不是2 tm_wday |
| 你(C99)| 写星期几作为十进制数,星期一为1(ISO 8601格式)(范围1-7)| tm_wday |
| Ou(C99)| 写星期几,星期一为1,使用替代数字系统,例如ja_JP locale |中的二而不是2 tm_wday |
| 小时,分钟,秒|
| H | 将小时数写为十进制数,24小时制(范围00-23)| tm_hour |
| OH(C99)| 使用替代数字系统从24小时制写小时,例如ja_JP locale |中的十八而不是18 tm_hour |
| 我| 将小时数写为十进制数,12小时制(范围01,12)| tm_hour |
| OI(C99)| 使用替代数字系统从12小时时钟写入小时,例如ja_JP locale中的六而不是06 tm_hour |
| M | 将分钟写入十进制数(范围为00,59)| tm_min |
| OM(C99)| 使用替代数字系统写分钟,例如ja_JP locale |中的二十五而不是25 tm_min |
| S | 写第二个作为十进制数(范围00,60)| tm_sec |
| OS(C99)| 使用替代数字系统写第二个,例如ja_JP locale |中的二十四而不是24 tm_sec |
| 其他|
| c | 写标准的日期和时间字符串,例如Sun 10月17日04:41:13 2010(取决于语言环境)| 全部|
| Ec(C99)| 写替代日期和时间字符串,例如在ja_JP语言环境中使用平成23年(平成23年)而不是2011年(2011年)全部|
| x | 写本地化的日期表示法(依赖于语言环境)| 全部|
| Ex(C99)| 写替代日期表示法,例如在ja_JP语言环境中使用平成23年(平成23年)而不是2011年(2011年)全部|
| X | 写本地化的时间表示(区域依赖)| 全部|
| EX(C99)| 写入替代时间表示(取决于语言环境)| 全部|
| D(C99)| 相当于“%m /%d /%y”| tm_mon,tm_mday,tm_year |
| F(C99)| 相当于“%Y-%m-%d”(ISO 8601日期格式)| tm_mon,tm_mday,tm_year |
| r(C99)| 写本地化的12小时时钟时间(取决于语言环境)| tm_hour,tm_min,tm_sec |
| R(C99)| 相当于“%H:%M”| tm_hour,tm_min |
| T(C99)| 相当于“%H:%M:%S”(ISO 8601时间格式)| tm_hour,tm_min,tm_sec |
| p | 写本地化的上午或下午(区域依赖)| tm_hour |
| z(C99)| 写入ISO 8601格式的UTC偏移量(例如-0430),如果时区信息不可用,则不显示字符| tm_isdst |
| Z | 写时区名称或缩写,或者如果时区信息不可用(取决于语言环境),则为无字符| tm_isdst |
| 时间| - | 指向结构tm对象的指针,指定格式化为|的时间
- 包括1月4日
tm_year
, tm_wday
, tm_yday
g
(C99)写出ISO 8601以周为单位的年份的
后两位数字,即包含指定周(范围[00,99]
)的年份。在IS0 8601周内从星期一开始,一年的第一周必须满足以下要求:
- 包括1月4日
tm_year
,tm_wday
,tm_yday
月 b
写缩写的月份
名称,例如Oct
(位置有关) tm_mon
h
(C99)b
tm_mon
B
写完整月份
名称的同义词,例如October
(区域设置相关) tm_mon
m
将月份
写为十进制数(范围[01,12]
) tm_mon
Om
(C99)写道月
使用可替代数字系统,如十二代替12 Ja_JP表示区域 tm_mon
周 U
写了一年的星期
为十进制数(星期日是一周的第一天)(范围[00,53]
) tm_year
,tm_wday
,tm_yday
OU
(C99)写道一周年
通过,%U
使用替代的数字系统,如五十二,而不是在Ja_JP表示区域52 tm_year
,tm_wday
,tm_yday
W
写了一年的星期
为十进制数(星期一是一周的第一天)(范围[00,53]
) tm_year
,tm_wday
,tm_yday
OW
(C99)写道星期的一年
,通过%W
使用替代的数字系统,如五十二,而不是在Ja_JP表示区域52 tm_year
,tm_wday
,tm_yday
V
(C99)写入一年中的ISO 8601周
(范围[01,53]
)。在IS0 8601周内从星期一开始,一年的第一周必须满足以下要求:
- 包括1月4日
tm_year
, tm_wday
, tm_yday
OV
(C99)写入周一年中
通过,%V
使用替代的数字系统,例如五十二代替Ja_JP表示区域52 tm_year
,tm_wday
,tm_yday
年/月的日
j
写入一年中的哪一天
为十进制数(范围[001,366]
) tm_yday
d
写入日
作为十进制数(范围[01,31]
) 的月份
tm_mday
Od
(C99)使用替代数字系统编写月份的
零基日期
,例如ja_JP语言环境中的二十七而不是23。单个字符前面有一个空格。
tm_mday
e
(C99)以十进制数(范围)的形式写入当月的某天
[1,31]
。单个数字前面有一个空格。
tm_mday
Oe
(C99)使用替代数字系统写一个月
的一天
,例如ja_JP语言环境中的二十七而不是27。单个字符前面有一个空格。
tm_mday
星期 a
写简写的星期
名称,例如Fri
(位置有关) tm_wday
A
写完整的星期几
的名称,如Friday
(位置有关) tm_wday
w
写入平日
的十进制数,星期日为0
(范围[0-6]
) tm_wday
Ow
(C99)使用替代数字系统写周日
,其中星期日是0
,例如ja_JP语言环境中的二而不是2 tm_wday
u
(C99)将星期
几写为十进制数,星期
一为1
(ISO 8601
格式)(范围[1-7]
) tm_wday
Ou
(C99)写入平日
,其中星期一是1
,使用备选数字系统,例如,二,而不是在区域设置Ja_JP表示2 tm_wday
时,分,秒 H
写入小时
为十进制数,24小时
时钟(范围[00-23]
) tm_hour
OH
(C99)写入小时
从24小时
时钟使用备选数字系统,例如十八代替18的区域设置Ja_JP表示 tm_hour
I
写入小时
为十进制数,12个小时
的时钟(范围[01,12]
) tm_hour
OI
(C99)使用替代数字系统从12小时
时钟写入小时
,例如ja_JP语言环境中的六而不是06 tm_hour
M
写入分钟
数(范围[00,59]
) tm_min
OM
(C99)使用替代数字系统写入分钟
,例如ja_JP语言环境中的二十五而不是25 tm_min
S
写入第二个
作为十进制数(范围[00,60]
) tm_sec
OS
(C99)使用替代数字系统写第二个
,例如ja_JP语言环境中的二十四而不是24个 tm_sec
其他 c
写入标准日期和时间字符串
,例如Sun Oct 17 04:41:13 2010
(取决于语言环境)全部 Ec
(C99)写入备选日期和时间字符串
,例如在ja_JP语言环境中使用平成23年(年平成23年)而不是2011年(2011年),全部 x
写入本地化日期表示
(与语言环境有关)全部 Ex
(C99)在ja_JP语言环境中使用平成23年(年平23)而不是2011年(2011年)编写替代日期表示法
,全部 X
写入本地时间表示
(与语言环境有关)全部 EX
(C99)全部写入替代时间表示
(区域依赖) D
(C99),相当于“%米/%d /%Y” ,
,tm_montm_mdaytm_year
F
(C99),相当于“%Y-%间- %d”
(在ISO 8601的日期格式) tm_mon
,tm_mday
,tm_year
r
(C99)写入局部12小时制
的时间(当前位置有关) tm_hour
,tm_min
,tm_sec
R
(C99)相当于“%H:%M”
tm_hour
,tm_min
T
(C99),相当于“%H:%M:%S”
(在ISO 8601时间格式) tm_hour
,tm_min
,tm_sec
p
写入局部上午或下午
(当前位置有关) tm_hour
z
(C99)将UTC的偏移量
在ISO 8601格式(例如-0430
),或没有字符,如果时区信息不可 tm_isdst
Z
写入的时区名称或缩写
,如果时区信息不可用,或者没有文字(语言环境而定) tm_isdst
时间 - 指向指定格式化时间的struct tm对象的指针
返回值
写入字符数组的字节数str
不包括终止'\0'
成功。如果count
在整个字符串可以存储之前达到,0
则返回并且内容未定义。
例
#include <stdio.h>
#include <time.h>
#include <locale.h>
int main(void)
{
char buff[70];
struct tm my_time = { .tm_year=112, // = year 2012
.tm_mon=9, // = 10th month
.tm_mday=9, // = 9th day
.tm_hour=8, // = 8 hours
.tm_min=10, // = 10 minutes
.tm_sec=20 // = 20 secs
};
if (strftime(buff, sizeof buff, "%A %c", &my_time)) {
puts(buff
} else {
puts("strftime failed"
}
setlocale(LC_TIME, "el_GR.utf8"
if (strftime(buff, sizeof buff, "%A %c", &my_time)) {
puts(buff
} else {
puts("strftime failed"
}
}
输出:
Sunday Sun Oct 9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST
参考
- C11标准(ISO / IEC 9899:2011):