gpt4 book ai didi

c - strftime 和非标准化日期/时间

转载 作者:太空狗 更新时间:2023-10-29 15:31:20 26 4
gpt4 key购买 nike

strftime%H%M%S 说明符(包括那些在 ANSI/ISO C 标准中)包含类似的语言

%H   is replaced by the hour (24-hour clock) as a decimal number (00-23).

现在,末尾的小符号“(00-23)”告诉您如果 struct tm 您将看到的数字范围 打印是由 localtimegmtime 刚刚创建的。

我的问题涉及是否存在要求strftime 引用的 struct tm 必须一个刚刚由 localtimegmtime 生成的。我不认为有这样的要求,但如果没有,那些符号“(00-23)”和“(00-59)”对strftime——它们更像是对值的错误要求由 localtimegmtime 生成。

但是如果strftime不限制各种struct tm的范围字段到他们的“正常”值,这让我想知道有多少一个突破界限的程序员在什么时候实际拥有的自由度调用 strftime。这些值是否像它们在调用,比方说,mktime

为了使问题更具体,当我发现我自己写这段代码:

time_t dt = t2 - t1;
struct tm *tmp = gmtime(&dt);
if(dt > 86400)
tmp->tm_hour += dt / 86400 * 24;
strftime(etbuf, sizeof(etbuf), "elapsed: %H:%M:%S", tmp);

也就是说,我减去两次,让 gmtimestrftime 为我将差异转换为 HH:MM:SS 格式。但如果时间增量超过一天,我就不会打印它作为天数;我只是把它和时间混为一谈(这是真的,如果有几个月或t1t2 之间的年数)。

所以,语言律师问题:这合法且可移植吗?调用strftime时,是tm_hourtm_min,其余是否限制在他们的正常范围内? (是的,我试过了,非标准化值起作用——一点也不奇怪——正如流行的实现所预期的那样,但事实并非如此问题。)

[全面披露:我正在发布 same questiontz mailing list .]

最佳答案

C11 标准 7.27.3.5/3 说:

If any of the specified values is outside the normal range, the characters stored are unspecified.

我的意思是必须对输入进行规范化才能使函数正常运行; strftime 的一致实现可能会通过简单地读取和显示存储在结构中的值而不对它们执行任何分析来运行。

关于c - strftime 和非标准化日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com