我一直在使用像iperf3这样的工具时,使用它的--timestamps功能,使用strftime在引擎盖下的格式化时间.虽然我已经看到examples显示了用于时间戳的转换说明符%s,但我还没有能够看到official documentation关于它的使用.在strftime.c的源代码中,没有任何注释/注释提到它在文档中的缺失.虽然功能似乎工作得很好,我遇到了suggestionsmentions(mostly related to the python datetime module)警告不要依赖这种格式.

我很想理解使用%s的含义,包括任何历史背景.任何关于这个主题的见解或知识将不胜感激!

推荐答案

%s is not part of the C standard、取决于执行情况.在MacOS上,它有BSD根,它是.

     %s    is replaced by the number of seconds since the Epoch, UTC (see mktime(3)).

手册解释了…

标准

strftime()函数符合ISO/IEC 9899:1990("ISO C90"),并有许多扩展 包括'%C'、'%D'、' %E'、'% e'、'%G'、'% g'、'% h'、'% k'、'% l'、'% n'、'%O'、'%R'、'% r', "% s"、"%T"、"% t"、"% u"、"%V"、"% z"和"%+".

"%G"、"% g"和"%V"替换中的特殊周数和年份在ISO 8601:1988中定义.


Epoch time是从epoch开始的数字101,所以是%s.

如果我们看the first version of strftime.c in NetBSD,我们会看到这个.

    188  1.1  mrg           case 's':
    189  1.1  mrg               if (!_secs(t))
    190  1.1  mrg                   return(0);
    191  1.1  mrg               continue;

_secs104只不过是mktime左右的薄包装.C标准的人可能觉得%smktime是多余的,BSD的人认为它很方便.


许多用C实现的语言,如Python,仍然依赖于strftime,因此只记录了标准语言和一些常见扩展.例如,在MacOS上的Python datetime.now().strftime("%:z")中,简单地打印:z,因为MacOS strftime没有实现%:z.而Ruby has its own strftime implementationTime.now.strftime('%:z')是有效的.

C++相关问答推荐

Zig将std.os.argv转换为C类型argv

ISO_C_BINDING,从Fortran调用C

手动矢量化性能差异较大

如何将已分配的数组(运行时已知的大小)放入 struct 中?

如何在Visual Studio代码中关闭此函数名称显示功能?

为什么在此程序中必须使用Volatile关键字?

Can函数指针指向C++中具有不同参数连续性的函数

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

在基本OpenGL纹理四边形中的一个三角形中进行渲染

是否需要包括<;errno.h>;才能使用perror?

I2C外设在单次交易后出现故障

在C语言中,指针指向一个数组

S和查尔有什么不同[1]?

C语言中神秘的(我认为)缓冲区溢出

某些EAX值的不同调用方的CPUID结果不一致

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

RISC-V GCC编译器错误编译ASM代码

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

如何使用 raylib 显示数组中的图像

如何确定 C 程序中的可用堆内存