Linux date命令如何在自定义格式串中输出默认普通日期记法
实现方法
自定义locale开发调试date命令日期表示规则时,无法通过单个格式符直接引用date无参数的默认输出——默认输出不是直接对应%c/%Ec这类内置格式,从测试结果就能看到明确差异:
%c/%Ec输出:Fri Jun 24 13:54:39 2022(无时区标识)- 无参数date默认输出:
Fri Jun 24 13:54:39 HKT 2022(带本地时区缩写)
date无参数输出的内部逻辑是:取当前locale定义的标准日期时间组合格式(也就是%c对应的格式定义),在时间字段和年份字段之间插入%Z对应的时区缩写后输出。
具体写法
如果是针对固定locale调试,可以直接手动拼接对应字段,以测试用的en_HK.UTF-8场景为例,自定义格式串里加入默认输出的写法如下:
LANG=en_HK.UTF-8 date '+ (default) %a %b %e %H:%M:%S %Z %Y %n (%%Ec) %Ec %n (%%r ) %r %n (%%c ) %c %n (ref) %F %T wk %U at %u'
执行后(default)段的输出就和无参数执行date的结果完全一致。
如果需要适配任意自定义locale,不要硬编码字段顺序,可以先执行locale -k d_t_fmt获取当前locale下%c对应的原始格式字符串,再在时间字段和年份字段的对应位置插入%Z,即可得到和无参数date完全一致的输出。
内容的提问来源于stack exchange,提问作者midnite
相关产品推荐
相关产品推荐

