如何格式化日期以显示或者在Shell脚本中使用
时间:2020-01-09 10:42:15 来源:igfitidea点击:
如何根据我在Linux或者Unix之类的操作系统上的要求,格式化要在shell脚本屏幕上显示的日期?
您需要使用标准date命令在Linux或者Unix shell脚本中格式化日期或者时间。
您可以对shell脚本使用相同的命令。
本教程显示如何在Linux或者基于Unix的系统中格式化日期。
Linux语法格式化日期以在屏幕上显示
GNU/date和BSD/date命令的语法如下:
date +FORMAT date +"%FORMAT" date +"%FORMAT%FORMAT" date +"%FORMAT-%FORMAT"
带前导加号(+
)的操作数表示用户定义的格式字符串,该字符串指定显示日期和时间的格式。
以下示例在GNU/Linux,Apple OS X Unix和FreeBSD Unix操作系统上进行了测试。
以mm-dd-yy格式显示日期
打开终端并输入以下日期命令:
$ date +"%m-%d-%y"
输出示例:
02-27-07
要打开4位数字的年显示:
$ date +"%m-%d-%Y"
只需将日期显示为mm/dd/yy格式:
$ date +"%D"
仅显示时间
执行以下命令:
$ date +"%T"
输出示例:
19:55:04
要显示语言环境的12小时制,请执行:
$ date +"%r"
输出示例:
07:56:05 PM
要以HH:MM格式显示时间,请执行:
$ date +"%H-%M"
输出示例:
00-50
如何将时间/日期格式保存到shell变量中?
只需在shell提示符下执行以下命令:
$ NOW=$(date +"%m-%d-%Y")
要显示变量,请使用echo/printf命令:
$ echo $NOW
一个示例shell脚本
#!/bin/bash NOW=$(date +"%m-%d-%Y") FILE="backup.$NOW.tar.gz" echo "Backing up data to /nas42/backup.$NOW.tar.gz file, please wait..." # rest of script # tar xcvf /nas42/backup.$NOW.tar.gz /home/ /etc/ /var
GNU/date命令支持的FORMAT控制字符的完整列表
FORMAT控制输出。
它可以是以下任意一项的组合:
%FORMAT字符串 | 描述 |
---|---|
%% | 文字% |
%a | 语言环境缩写的星期几名称(例如,Sun) |
%A | 语言环境完整的工作日名称(例如,星期日) |
%b | 语言环境缩写的月份名称(例如Jan) |
%B | 语言环境完整月份名称(例如,一月) |
%c | 语言环境日期和时间(例如2005年3月3日星期四,23:05:25) |
%C | 世纪;类似于%Y,但省略了后两位数字(例如21) |
%d | 每月的某天(例如01) |
%D | 日期;与%m /%d /%y相同 |
%e | 每月的某天,空格已填充;与%_d |
%F | 完整日期;与%Y-%m-%d |
%g | ISO周号的年份的后两位数字(请参见%G) |
%G | ISO周编号的年份(请参见%V);通常仅对%V |
%h | 与%b相同 |
%H | 小时(00..23) |
%I | 小时(01..12) |
%j | 一年中的哪一天(001..366) |
%k | 小时(0..23) |
%l | 小时(1..12) |
%m | 月(01..12) |
%M | 分钟(00..59) |
%n | 换行符 |
%N | 纳秒(000000000..999999999) |
%p | 相当于AM或者PM的语言环境;如果未知,则为空白 |
%P | 类似于%p,但小写 |
%r | 区域设置12小时制(例如11:11:04 PM) |
%R | 24小时小时和分钟;与%H:%M |
%s | 秒,自1970-01-01 00:00:00 UTC |
%S | 秒(00..60) |
%t | 标签 |
%T | 时间;与%H:%M:%S |
%u | 星期几(1..7); 1是星期一 |
%U | 年的周数,以星期日为一周的第一天(00..53) |
%V | ISO周数,以星期一为一周的第一天(01..53) |
%w | 星期几(0..6); 0是星期日 |
%W | 年的周数,以星期一为一周的第一天(00..53) |
%x | 语言环境日期表示形式(例如,12/31/99) |
%X | 语言环境时间表示形式(例如23:13:48) |
%y | 年份的后两位(00..99) |
%Y | 年 |
%z | + hhmm数字时区(例如<B> -0400) |
%:z | + hh:mm数字时区(例如<B> -04:00) |
%:: z | + hh:mm:ss数字时区(例如<B> -04:00:00) |
%::: z | 数字时区,带有:达到必要的精度(例如<B> -04,+ 05:30) |
%Z | 字母时区缩写(例如EDT) |
BSD/date命令支持的FORMAT控制字符的完整列表
以下命令适用于Apple OS X,FreeBSD和BSD版本的date命令:
%A | 被完整的工作日名称的国家表示代替。 |
%a | 被缩写的工作日名称的国家/地区表示代替。 |
%B | 被替换为完整月份名称的国家/地区代表。 |
%b | 被缩写的月份名称的国家表示代替。 |
%C | 替换为(年/100)作为十进制数;单个数字后跟零。 |
%c | 被时间和日期的国家表示代替。 |
%D | 等于%m /%d /%y。 |
%d | 被替换为十进制数字(01-31)。 |
%E*%O* | POSIX语言环境扩展。 %Ec%EC%Ex%EX%Ey%EY%Od%Oe%OH%OI%Om%OM%OS%Ou%OU%OV%Ow%OW%Oy的序列应提供替代表示。 此外,还实现了%OB来表示其他月份的名称(独立使用,未提及日期)。 |
%e | 被替换为十进制数字(1-31)的月份中的日期;一位数字后跟一个空格。 |
%G | 被世纪替换为十进制数字的年份。今年是一周中大部分时间的月份(星期一为一周的第一天)。 |
%g | 被替换为与%G中相同的年份,但替换为不带世纪的十进制数字(00-99)。 |
%H | 被小时(24小时制)替换为十进制数字(00-23)。 |
%h | 与%b相同。 |
%I | 被小时(12小时制)替换为十进制数字(01-12)。 |
%j | 被替换为十进制数字(001-366)。 |
%k | 被小时(24小时制)替换为十进制数字(0-23);单个数字后跟一个空格。 |
%l | 被小时(12小时制)替换为十进制数字(1-12);单个数字后跟一个空格。 |
%M | 被分钟替换为十进制数字(00-59)。 |
%m | 被替换为月份的十进制数字(01-12)。 |
%n | 换行。 |
%O* | 与%E*相同。 |
%p | |
%R | 等效于%H:%M。 |
%r | 等效于%I:%M:%S%p。 |
%S | 被第二个十进制数字(00-60)取代。 |
%s | 替换为自世界协调时间(UTC)以来的秒数(请参阅mktime(3))。 |
%T | 等于%H:%M:%S。 |
%t | 被制表符代替。 |
%U | 被替换为一年中的星期数(星期日为一周的第一天)作为十进制数(00-53)。 |
%u | 被替换为工作日(星期一为一周的第一天)作为十进制数字(1-7)。 |
%V | 替换为年份的星期数(星期一为星期的第一天),以十进制数(01-53)表示。如果包含1月1日的一周在新年中有四天或者更多天,则为第一周;否则,它是上一年的最后一周,而下周是第1周。 |
%v | 等同于%e-%b-%Y。 |
%W | 被替换为年份的星期数(星期一作为星期的第一天)作为十进制数(00-53)。 |
%w | 被替换为工作日(星期日为一周的第一天)作为十进制数字(0-6)。 |
%X | 被时间的国家表示代替。 |
%x | 被日期的国家表示代替。 |
%Y | 替换为以世纪作为十进制数字的年份。 |
%y | 被不带世纪的年份替换为十进制数字(00-99)。 |
%Z | 被时区名称替换。 |
%z | 被从UTC偏移的时区替换; |
%+ | 替换为日期和时间的国家表示形式(格式类似于date(1)生成的格式)。 |
%-* | GNU libc扩展。在执行数字输出时,请勿进行任何填充。 |
%_* | GNU libc扩展。明确指定用于填充的空间。 |
%0* | GNU libc扩展。显式指定填充零。 |
%% | 被%代替。 |