如何使用 date 命令
======

![](https://www.rosehosting.com/blog/wp-content/uploads/2017/12/How-to-Use-the-Date-Command-in-Linux.jpg)

在本文中, 我们会通过一些案例来演示如何使用 Linux 中的 `date` 命令。`date` 命令可以用户输出/设置系统日期和时间。 `date` 命令很简单, 请参见下面的例子和语法。

默认情况下，当不带任何参数运行 `date` 命令时，它会输出当前系统日期和时间：

```shell
$ date
Sat  2 Dec 12:34:12 CST 2017
```

### 语法

```
Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
以给定格式显示当前时间，或设置系统时间。
```

### 案例

下面这些案例会向你演示如何使用 `date` 命令来查看前后一段时间的日期时间。

#### 1、 查找 5 周后的日期

```shell
date -d "5 weeks"
Sun Jan  7 19:53:50 CST 2018
```

#### 2、 查找 5 周后又过 4 天的日期

```shell
date -d "5 weeks 4 days"
Thu Jan 11 19:55:35 CST 2018
```

#### 3、 获取下个月的日期

```shell
date -d "next month"
Wed Jan  3 19:57:43 CST 2018
```

#### 4、 获取下周日的日期

```shell
date -d last-sunday
Sun Nov 26 00:00:00 CST 2017
```

`date` 命令还有很多格式化相关的选项, 下面的例子向你演示如何格式化 `date` 命令的输出.

#### 5、 以 `yyyy-mm-dd` 的格式显示日期

```shell
date +"%F"
2017-12-03
```

#### 6、 以 `mm/dd/yyyy` 的格式显示日期

```shell
date +"%m/%d/%Y"
12/03/2017
```

#### 7、 只显示时间

```shell
date +"%T"
20:07:04
```

#### 8、 显示今天是一年中的第几天

```shell
date +"%j"
337
```

#### 9、 与格式化相关的选项

| 格式  | 说明  |
|---------------|----------------|
| `%%` | 显示百分号 （`%`）。 |
| `%a` | 星期的缩写形式 （如： `Sun`）。 |
| `%A` | 星期的完整形式 （如： `Sunday`）。 |
| `%b` | 缩写的月份 （如： `Jan`）。 |
| `%B` | 当前区域的月份全称 （如： `January`）。 |
| `%c` | 日期以及时间 （如： `Thu Mar 3 23:05:25 2005`）。 |
| `%C` | 当前世纪；类似 `%Y`， 但是会省略最后两位 （如： `20`）。 |
| `%d` | 月中的第几日 （如： `01`）。 |
| `%D` | 日期；效果与 `%m/%d/%y` 一样。 |
| `%e` | 月中的第几日， 会填充空格；与 `%_d` 一样。 |
| `%F` | 完整的日期；跟 `%Y-%m-%d` 一样。 |
| `%g` | 年份的后两位 （参见 `%G`）。 |
| `%G` | 年份 （参见 `%V`）；通常跟 `%V` 连用。 |
| `%h` | 同 `%b`。 |
| `%H` | 小时 （`00`..`23`）。 |
| `%I` | 小时 （`01`..`12`）。 |
| `%j` | 一年中的第几天 （`001`..`366`）。 |
| `%k` | 小时， 用空格填充 （ `0`..`23`）; 与 `%_H` 一样。 |
| `%l` | 小时， 用空格填充 （ `1`..`12`）; 与 `%_I` 一样。 |
| `%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` | 一年中的第几个星期，以周一为一周的开始 （`01`..`53`）。 |
| `%w` | 用数字表示周几 （`0`..`6`）； 0 表示 `周日`。 |
| `%W` | 一年中的第几个星期， 周一为一周的开始 （`00`..`53`）。 |
| `%x` | 当前区域的日期表示（如： `12/31/99`）。 |
| `%X` | 当前区域的时间表示 （如： `23:13:48`）。 |
| `%y` | 年份的后面两位 （`00`..`99`）。 |
| `%Y` | 年。 |
| `%z` | 以 `+hhmm` 的数字格式表示时区 （如： `-0400`）。 |
| `%:z` | 以 `+hh:mm` 的数字格式表示时区 （如： `-04:00`）。 |
| `%::z` | 以 `+hh:mm:ss` 的数字格式表示时区 （如： `-04:00:00`）。 |
| `%:::z` | 以数字格式表示时区， 其中 `:` 的个数由你需要的精度来决定 （例如， `-04`， `+05:30`）。 |
| `%Z` | 时区的字符缩写（例如， `EDT`）。 |

#### 10、 设置系统时间

你也可以使用 `date` 来手工设置系统时间，方法是使用 `--set` 选项, 下面的例子会将系统时间设置成 2017 年 8 月 30 日下午 4 点 22 分。

```shell
date --set="20170830 16:22"
```

当然, 如果你使用的是我们的 [VPS 托管服务][1]，你总是可以联系并咨询我们的 Linux 专家管理员（通过客服电话或者下工单的方式）关于 `date` 命令的任何东西。他们是 24×7 在线的，会立即向您提供帮助。（LCTT 译注：原文的广告~）

PS. 如果你喜欢这篇帖子，请点击下面的按钮分享或者留言。谢谢。

--------------------------------------------------------------------------------

via: https://www.rosehosting.com/blog/use-the-date-command-in-linux/

作者：[rosehosting][a]
译者：[lujun9972](https://github.com/lujun9972)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

[a]:https://www.rosehosting.com
[1]:https://www.rosehosting.com/hosting-services.html
