strftime 中的 %h 和 %b 有什么区别
What is the difference between %h and %b in strftime
我在阅读 strftime
(3) 的手册页时发现:
%b
The abbreviated month name according to the current locale. (Calculated from tm_mon
.)
[...]
%h
Equivalent to %b
. (SU)
两者是完全一样还是有区别?有没有优先考虑一个的特殊情况?
它们是相同的。
几十年来,出现了许多不同的 Unix 实现,以及许多在字符串表示和日期之间进行转换的不同函数。其中一些函数使用 %b
作为缩写月份,其中一些函数使用 %h
。随着时间的推移,除了 strftime
之外的所有遗留接口都被弃用,不同的格式代码被合并,不仅与不同的 strftime
等价物而且与相关的 strptime
函数(解析生成日期的字符串)和命令行 date
实用程序。 (date
的命令行选项之间仍然存在很多差异,但至少核心格式代码是可互操作的。)结果是许多格式代码具有两种不同的拼写。
大多数现代程序都使用 %b
,您不太可能找到仅支持 %h
的系统,至少在博物馆之外是这样。但是 %b
和 %h
都是由 Posix 授权的,具有相同的含义,并且没有任何迹象表明 %h
面临弃用。所以你用哪个是你的选择。
它们在行为上是等价的。然而,%h
在 Single Unix Specification (SU) 中被标准化。这是did not exist in C89.
的补充
实际上从来没有 %h
可以工作但 %b
不工作的情况 - 这意味着您的目标是支持 %h
但不支持 %b
的实现既不符合已有 31 年历史的标准修订版,也不符合其任何修正案。相反的是仍然(不幸的是)更有可能。
TL;DR:始终使用 %b
而不是 %h
。
我在阅读 strftime
(3) 的手册页时发现:
%b
The abbreviated month name according to the current locale. (Calculated fromtm_mon
.)[...]
%h
Equivalent to%b
. (SU)
两者是完全一样还是有区别?有没有优先考虑一个的特殊情况?
它们是相同的。
几十年来,出现了许多不同的 Unix 实现,以及许多在字符串表示和日期之间进行转换的不同函数。其中一些函数使用 %b
作为缩写月份,其中一些函数使用 %h
。随着时间的推移,除了 strftime
之外的所有遗留接口都被弃用,不同的格式代码被合并,不仅与不同的 strftime
等价物而且与相关的 strptime
函数(解析生成日期的字符串)和命令行 date
实用程序。 (date
的命令行选项之间仍然存在很多差异,但至少核心格式代码是可互操作的。)结果是许多格式代码具有两种不同的拼写。
大多数现代程序都使用 %b
,您不太可能找到仅支持 %h
的系统,至少在博物馆之外是这样。但是 %b
和 %h
都是由 Posix 授权的,具有相同的含义,并且没有任何迹象表明 %h
面临弃用。所以你用哪个是你的选择。
它们在行为上是等价的。然而,%h
在 Single Unix Specification (SU) 中被标准化。这是did not exist in C89.
实际上从来没有 %h
可以工作但 %b
不工作的情况 - 这意味着您的目标是支持 %h
但不支持 %b
的实现既不符合已有 31 年历史的标准修订版,也不符合其任何修正案。相反的是仍然(不幸的是)更有可能。
TL;DR:始终使用 %b
而不是 %h
。