在使用date命令输出日期时间时,通过格式字符串可以指定日期时间的格式。根据格式字符串中格式说明符的作用可分为以下几类。
%a:当前区域设置下星期的缩写,如“Sun”、“Mon”。
%A:当前区域设置下星期的全拼,如“Sunday”、“Monday”。
%b:当前区域设置下月份的缩写,如“Jan”、“Feb”。
%B:当前区域设置下月份的全拼,如“January”、“February”。
%c:当前区域设置下的日期和时间,如“Sat 19 Jan 2019 05:51:45 PM CST”。
%C:世纪,类似%Y,只是最后两个数字被省略了,如%Y为2019,则%C为20。
%d:一月中的那一天,如“19”、“05”。
%D:日期,等效于“%m/%d/%y”(美国格式),如“01/19/19”。
%e:一月中的那一天,空格填充,等效于“%_d”,如“19”、“ 5”。
%F:ISO 8601格式的完整日期,等效于“%Y-%m-%d”,如“2019-01-19”。对于日期格式,这是一个很好的选择,因为它是标准的,并且在年份范围为0000…9999的通常情况下很容易排序。
%g:ISO周数对应的不包含世纪的年份(00-99),等效于“%y”,除非ISO周数属于前一年或后一年,则使用前一年或后一年。
%G:ISO周数对应的年份(0000-9999),等效于“%Y”,除非ISO周数属于前一年或后一年,则使用前一年或后一年。格式“%G-%m-%d”有可能是错误的,因为它将ISO周数的年与传统的月和日结合在了一起。
%h:等效于“%b”。
%j:一年中的天数(001-366)。
%m:月份(01-12)。
%u:星期的天数(1-7),1是周一。
%U:周数(00-53), 周日为一周的第一天。新年第一个星期日之前的几天是第零周。
%V:ISO周数(01-53),周一为一周的第一天。如果包含1月1日的一周在新的一年里有四天或四天以上,则认为这周是第一周,否则就是前一年的第53周,下一周是新年的第一周。
%w:星期的天数(0-6),0是周日。
%W:周数(00-53),周一为一周的第一天。新年第一个星期一之前的几天是第零周。
%x(小写):按当前区域设置下的日期格式,如“01/19/2019”。
%y:年份的后两位(00-99)。
%Y:年份。
%H:时(00-23)。
%I(大写i):时(01-12)。
%k:时,空格填充( 0-23),等效于“%_H”,是GNU扩展。
%l(小写l):时,空格填充( 0-12),等效于“%_I”,是GNU扩展。
%M:分(00-59)。
%N:纳秒(000000000-999999999),是GNU扩展。
%p:本地区域设置下等价于“AM”或“PM”,在许多地区是空字符串。中午视为“PM”,午夜视为“AM”。
%P:与%p一样,只不过是小写的,是GNU扩展。
%r:本地区域设置下12小时制时间,如11:11:20 PM。
%R:24小时制的时和分,等效于“%H%M”,如“23:12”。
%s:从UTC时间纪元起的秒数,除非有闰秒支持,否则不计算闰秒,是GNU扩展。
%S:秒(00-60),如果支持闰秒则可能为60。
%T:24小时制的时分秒,等效于“%H:%M:%S”。
%X:(大写):按当前区域设置下的日期格式,如“10:53:24 PM”。
%z(小写):四位数字表示的时区,如“+0800”。如果时区不确定则为“-0000”。此值为使用TZ环境变量指定的时区规则。时区规则可以被-d(--date)选项覆盖。
%:z(小写):带“:”的数字时区。如“+08:00”。如果时区不确定则为“-00:00”,是GNU扩展。
%::z(小写):带“:”的精确到秒的数字时区。如“+08:00:00”。如果时区不确定则为“-00:00:00”,是GNU扩展。
%:::z(小写):带“:”的使用最小必要精度的时区。如“+08”、“+08:30:20”。如果时区不确定则为“-00”,是GNU扩展。
%Z(大写):按字母顺序排列的时区缩写。如“CST”。如果时区不确定则返回空字符串。
%%:字符“%”。
%n:换行符。
%t:制表符。
除非另外指定否则,date通常用0填充数字,比如数字月份总是输出两个数字。做为GNU扩展,date可以识别“%”后面的以下标记:
-(连字号):不进行填充。
_(下划线):填充空格。
0:填充0。
^:如果可能的话,使用大写字符。
#:如果可能的话,使用大小写相反的字符(大写变小写,小写变大写)。
可以在任意标记之后说明符之前加上一个数字来指定域的宽度,如果输出域的自然长度小于指定的域宽度,会自动填充左侧到指定长度。比如“%10a”,输出为“ Mon”,长度为10,左侧被空格填充。通常在不指定填充符的情况下,如果输出格式为纯数字会用0填充,如果包含非数字字符,则用空格填充。数字时区例外,数字时区中虽然包含“+”、“-”或“:”,但依然会用0填充,且是填充在“+”、“-”号之后。
此外,在标记和宽度后面可以跟一个可选修饰符,修饰符有两个:
E:如果可以,使用本地区域设置下的替代表示。此修饰符适用于转换修饰符“%c”、“%c”、“%x”、“%x”、“%y”和“%y”。
O:如果可以,使用本地区域设置下的数字符号。此修饰符适用于数值的转换修饰符。
如果格式支持修饰符,但是没有可替代的表示,则会忽略修饰符。