如何格式化日期以显示或者在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扩展。显式指定填充零。 |
| %% | 被%代替。 |

