如何在 Linux 终端中显示日期和时间(并在 Bash 脚本中使用)

date 命令是 Bash shell 中的一个实用工具,它不仅存在于大多数 Linux 发行版中,甚至在 macOS 中也是默认配置的。本指南将深入探讨如何在命令行中使用 date 命令,并演示如何在 shell 脚本中利用它执行更复杂的任务,而不仅仅是显示当前时间。

运行不带任何参数的 date 命令将显示当前日期和时间,以及您所在的时区信息:

date

默认输出格式可能不够直观。 例如,年份出现在时区之后,而不是月份和日期之后。幸运的是,date 命令允许您通过传递不同的选项来定制输出格式。 实际上,可以使用超过 40 种不同的选项来精细控制日期和时间的显示方式。

要使用这些选项,您需要键入 date,然后是一个空格,接着是一个加号 +,最后是选项本身,选项以百分号 % 开头。 例如,%c 选项(区域设置格式的日期和时间)会使日期和时间以与您的区域设置相关的标准化格式显示。 您的区域设置由您在安装操作系统时提供的地理和文化信息决定,它管理货币符号、纸张大小、时区以及其他文化规范等设置。

date +%c

使用 %c 选项后,年份在输出中显示的位置更为自然。

您可以一次传递多个选项给 date 命令,一组选项被称为格式化字符串。 要显示星期几的名称(%A)、月份中的日期(%d)和月份的名称(%B),可以使用以下命令:

date +%A%d%B

上述命令可以工作,但输出可能不够美观。 为此,我们可以将整个格式化字符串用引号括起来,从而可以在其中包含空格。 请注意,+ 号仍然在引号之外。

date +"%A %d %B"

您还可以在格式化字符串中添加文本:

date +"Today is: %A %d %B"

查阅 date 命令的 手册页 以查找所需的选项可能会非常耗时。 为了方便您查找,我们对这些选项进行了分组。

显示日期和时间的选项

%c:以您所在地区的格式打印日期和时间,包括时区。

显示日期的选项

%D:以 mm/dd/yy 格式打印日期。
%F:以 yyyy-mm-dd 格式打印日期。
%x:以您所在地区的格式打印日期。

显示星期几的选项

%a:打印星期几的缩写名称,例如 Mon、Tue、Wed 等。
%A:打印星期几的全名,例如 Monday、Tuesday、Wednesday 等。
%u:打印星期几的数字表示,其中 Monday = 1、Tuesday = 2、Wednesday = 3,依此类推。
%w:打印星期几的数字表示,其中 Sunday = 0、Monday = 1、Tuesday = 2,依此类推。
%d:打印月份中的第几天,如果需要,可以使用前导零 (01, 02 … 09)。
%e:打印月份中的第几天,如果需要,可以使用前导空格(’ 1’、’ 2′ …’ 9’)。 注意,撇号不打印。
%j:打印一年中的第几天,如果需要,可以使用最多两个前导零。

显示周数的选项

%U:打印一年中的周数,将星期日视为一周的第一天。例如,一年的第3周、一年的第20周等。
%V:打印一年中的 ISO 周数,将星期一视为一周的第一天。
%W:打印一年中的周数,将星期一视为一周的第一天。

显示月份的选项

%b%h:打印月份的缩写名称,例如 Jan、Feb、Mar 等。
%B:打印月份的全名,例如 January、February、March 等。
%m:打印月份的数字表示,如果需要,可以使用前导零 01、02、03 … 12。

显示年份的选项

%C:打印世纪(不包括年份)。 例如,2019 年将打印 20。
%y:将年份打印为两位数。 例如,2019 年将打印 19。
%Y:将年份打印为四位数。

显示时间的选项

%T:将时间打印为 HH:MM:SS。
%R:使用 24 小时制将小时和分钟打印为 HH:MM,不带秒。
%r:根据您的区域设置打印时间,使用 12 小时制和 AM 或 PM 指示符。
%X:根据您的区域设置打印时间,使用 24 小时制。 请注意,在测试期间,此选项的行为与 %r 完全相同。 在为英国语言环境配置并设置为 GMT 的 Linux 机器上,它按预期使用没有 AM 或 PM 指示符的 24 小时制打印时间。

显示小时的选项

%H:打印小时,范围为 00、01、02 … 23。
%I:使用 12 小时制打印小时,范围为 00、01、02 … 12,如果需要,可以使用前导零。

显示分钟的选项

%M:打印分钟,范围为 01、02、03 … 59,如果需要,带有前导零。

显示秒数的选项

%s:打印自 1970-01-01 00:00:00 UTC 以来的秒数(Unix 时间)。
%S:打印秒数,范围为 01、02、03 … 59,如果需要,带有前导零。
%N:打印纳秒。

显示时区信息的选项

%z:打印您的时区与 UTC 之间的时差。
%:z:打印您的时区与 UTC 之间的时差,小时和分钟之间带有冒号 :。 注意冒号 :% 符号和 z 之间。
%::z:打印您的时区与 UTC 之间的时差,小时、分钟和秒之间使用冒号 :。 注意 ::% 符号和 z 之间。
%Z:打印字母时区名称。

与格式相关的选项

%p:以大写形式打印 AM 或 PM 指示符。
%P:以小写形式打印 am 或 pm 指示符。 请注意这两个选项的特殊之处,小写的 p 给出大写输出,而大写的 P 给出小写输出。
%t:打印一个制表符。
%n:打印一个新行。

修改其他选项的选项

这些修饰符可以插入到 % 和其他选项的字母之间,以修改它们的显示方式。 例如,%-S 将删除一位数秒值的前导零。

-:单个连字符可防止对单个数字值进行零填充。
_:单个下划线为单个数字值添加前导空格。
0:为单个数字值提供前导零。
^:如果可能,则使用大写(并非所有选项都遵循此修饰符)。
#:如果可能,则使用与默认情况相反的选项(并非所有选项都遵循此修饰符)。

其他两个实用技巧

要获取文件的最后修改时间,请使用 -r(参考)选项。 请注意,这使用的是 -(连字符)而不是 % 符号,并且不需要 + 符号。 在您的主文件夹中尝试以下命令:

date -r .bashrc

通过 TZ 设置,您可以在单个命令的持续时间内更改时区。

TZ=GMT date +%c

在脚本中使用日期

在 Bash shell 脚本中打印时间和日期非常简单。 创建一个文本文件,内容如下,并将其保存为 gd.sh

#!/bin/bash

TODAY=$(date +"Today is %A, %d of %B")
TIMENOW=$(date +"The local time is %r")
TIME_UK=$(TZ=BST date +"The time in the UK is %r")

echo $TODAY
echo $TIMENOW
echo $TIME_UK

输入以下命令设置执行权限,使脚本可执行:

chmod +x gd.sh

使用以下命令运行脚本:

./gd.sh

我们可以使用 date 命令来提供时间戳。 下面的脚本将创建一个以时间戳为名称的目录。 然后,它会将当前文件夹中的所有文本文件复制到该目录中。 通过定期运行此脚本,我们可以拍摄文本文件的快照。 随着时间的推移,我们将建立一系列文件夹,其中包含不同版本的文本文件。

请注意,这并非一个强大的备份系统,它仅用于说明目的。

创建一个包含以下内容的文本文件,并将其保存为 snapshot.sh

#!/bin/bash

# 获取日期和时间
date_stamp=$(date +"%F-%H-%M-%S")

# 创建一个以时间戳为名称的目录
mkdir "$date_stamp"

# 将当前文件夹中的文件复制到该目录中
cp *.txt "$date_stamp"

# 完成,报告并退出
echo "Text files copied to directory: "$date_stamp

输入以下命令设置执行权限,使脚本可执行:

chmod +x snapshot.sh

使用以下命令运行脚本:

./snapshot.sh

您将看到已创建一个目录,其名称是执行脚本的日期和时间,目录内是文本文件的副本。

只要稍加思考和创造力,即使是简单的 date 命令也可以在生产中发挥重要作用。