MacOS 与 Linux 上的 date 命令用法

陪她去流浪 桃子 2021年04月03日 编辑 阅读次数:2366

MacOS 上的 date 命令和 Linux 上的 date 命令使用方式并不一样,像我这种经常工作在这两种系统上的人来说,不熟悉它们的区别,使用起来实在是难受。 遇到不会了就查一查,今天还是想写一篇文章来记录一下,作个总结。这篇文章只会讲跟日常使用相关的命令,像是使用 date 来修改系统时间这种极其低频的用法(至少对我来说)我就不叙述了。 文章没整理完,等我学到了新的再增加。(只是没写完,我是认真把两个 date 的 man 手册看了的,写博客的好处,哈哈。)

date 的功能:设置或显示时间。默认行为是以默认格式输出当前时间。可以指定输入格式和输入时间,可以指定输出格式。

基本约定:中括号内的参数表示是可选的。

语法概要

MacOS:

date                      [+输出格式]
date -r   秒数             [+输出格式]
date -jf  输入格式 输入时间  [+输出格式]

Linux:

date                      [+输出格式]
date -d   @秒数            [+输出格式]
date -d   输入时间及格式     [+输出格式]

格式控制

只列出相当小一部分,完整的请参考各自 date 的文档。

格式 说明
%% %
%Y 年,四位。
%y 年,后两位。
%m 月,带前缀 0。01..12
%d 日,带前缀 0。
%H 时(24小时制)。00..23
%I 时(12小时制)。01..12
%M 分。00..59
%S 秒。00..60
%j 一年中的第几天。001..366
%s 从 Unix Epoch 开始的秒数(即 Unix 时间戳)

另外还有一部分格式用于控制填充(放在 % 后面,其它格式前,比如:%-m 表示不带前缀 0 的月份):

格式 说明
- 不要默认填充 0
0 用 0 填充

显示当前时间

命令相同:date [+输出格式]

1
2
3
4
5
6
7
# 默认格式
$ date
Sat Apr  3 00:41:38 CST 2021

# 时间戳
$ date +%s
1617386329

其中的 CSTChina Standard Time 中国标准时间 的意思。

显示时间戳对应的时间

在 MacOS 上的命令语法:date -r 秒数

这个秒数即是最常见的时间戳(精确到秒),从 Unix 纪元(1970年1月1日0时0分0秒)开始算起。 秒数可以是十进制、八进制与十六进制(程序员应该知道不同的进制怎么写吧?)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 这是在 MacOS 上
$ date -r 0
Thu Jan  1 08:00:00 CST 1970

# -u 参数可以控制以 UTC 时区显示
$ date -ur 0
Thu Jan  1 00:00:00 UTC 1970

# https://twitter.com/kegns/status/1305123327371915266
$ date -r 1600000000
Sun Sep 13 20:26:40 CST 2020

在 Linux 的格式不一样:date -d @秒数date --date=@秒数

这个秒数的含义同上,但是只支持十进制。

1
2
3
4
5
6
7
8
9
# 这是在 Linux 上
$ date -d @0
Thu 01 Jan 1970 08:00:00 AM CST

$ date -ud @0
Thu 01 Jan 1970 12:00:00 AM UTC

$ date -d @1600000000
Sun 13 Sep 2020 08:26:40 PM CST