Linux date 命令使用详解 作者: truesnow 发布于: 5年前 收录于: Linux 命令 160 0 摘要:学习 Linux 下 date 命令的使用 [TOC] # 功能 从内核读取日期时间或设置内核日期时间。 只有超级用户可以设置。 查看帮助: ```sh $ man date ``` # UTC / CST / GMT / DST 含义 CST = China Standard Time = 北京时间/中国标准时间 = 在时区划分上,属东八区,比协调世界时早 8 小时,记为 UTC+8 GMT = Greenwich Mean Time = 格林威治标准时间 = 是指位于英国伦敦郊区的格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线 UTC = Universal Time Coordinated = 协调世界时 DST = Daylight Saving Time = 夏令时 = 一个地区的标准时间,即在夏令时 (DST, Daylight Saving Time) 时期以外使用的当地时间。全球 60% 以上的国家全年都只使用标准时间。而剩下的那些国家则在夏季使用夏令时,通常是把时钟从标准时间向前调 1 小时。 # 实例 ## 默认输出 ```sh $ date 2020年 7月28日 星期二 21时24分46秒 CST ``` ## 显示时间戳对应的日期时间 ```sh $ date -r 1595942824 2020年 7月28日 星期二 21时27分04秒 CST ``` ## 显示文件的最后修改时间 ```sh $ date -r package-lock.json 2018年 7月23日 星期一 20时42分43秒 CST ``` ## 显示 UTC 时间 ```sh $ date -u 2020年 7月28日 星期二 13时29分49秒 UTC ``` ## 格式化输出时间 若想按指定格式输出,使用双引号加 `+` 号开头设置,同时使用 `%` 前缀指定显示项: ```sh $ date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" DATE: 2020-07-28 TIME: 23:02:57 ``` - `%Y`:全写年份,1980-2038 - `%y`:简写年份:80-38 - `%m`:两位数月份,01-12 - `%n`:换行 - `%H`:两位数 24 小时制,00-23 - `%M`:两位数分钟数,00-59 - `%S`:两位数描述,00-59 ## 设置显示时间 使用 `-v` 选项可设置当前时间的某一项,并显示。注意这里不是设置时间,没有真正改变系统的日期时间,只是显示(输出)变了。支持设置「年、月、日、星期、时、分、秒」,支持使用加减号 `+`、`-` 设置。 -v 选项后面的字符必须是 「y, m, w, d, H, M 或 S」,分别表示「年、月、星期、日、时、分、秒」。且其值必须符合真实时间,限制如下: | 字符 | 含义 | 范围限制 | | --- | --- | --- | | y | 年 | 必须在 80-38 或 1980-2038 之间 | | m | 月 | 必须在 1-12(Jan-Dec) 之间 | | w | 星期 | 0-6 (Sun-Sat) | | d | 日 | 1-31 | | H | 时 | 0-23 | | M | 分 | 0-59 | | S | 秒 | 0-59 | ### 精确设置指定项 例如,假设当前时间为: ```sh $ date 2020年 7月28日 星期二 21时56分09秒 CST ``` 设置年份: ```sh // 将年份设为 2021 年 $ date -v 21y 2021年 7月28日 星期三 21时57分07秒 CST ``` 设置月份,支持数字和英文简写: ```sh // 将月份设为 8 月 $ date -v 8m 2020年 8月28日 星期五 21时58分02秒 CST // 将月份设为一月 $ date -v Janm 2020年 1月28日 星期二 22时04分38秒 CST ``` 设置日: ```sh // 将日份设为 29 日 $ date -v 29d 2020年 7月29日 星期三 21时58分51秒 CST ``` 设置小时数: ```sh // 将小时数设为 22 $ date -v 22H 2020年 7月28日 星期二 22时59分40秒 CST ``` 设置分钟数: ```sh // 将分钟数设为 30 $ date -v 30M 2020年 7月28日 星期二 22时30分21秒 CST ``` 设置秒数: ```sh // 将描述设为 30 $ date -v 30S 2020年 7月28日 星期二 22时00分30秒 CST ``` 设置星期,支持数字和英文简写,时间往前推: ```sh // 设为星期一 $ date -v 1w 2020年 7月27日 星期一 22时07分09秒 CST // 设为星期日 $ date -v Sunw 2020年 7月26日 星期日 22时13分44秒 CST ``` ### 设置值超出范围 当设置的值超出范围时,`date` 命令将显示命令使用方法: ```sh // 设置日期为 32,超出了 1-31 的取值 $ date -v 32d 32d: Cannot apply date adjustment usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] ``` ### 使用 + - 符号设置 ```sh // 当前时间往前 2 小时 $ date -v -2H 2020年 7月28日 星期二 20时31分22秒 CST // 当前时间往后 2 小时 $ date -v +2H 2020年 7月29日 星期三 00时33分24秒 CST // 当前时间往后 1 个月 $ date -v +1m 2020年 8月28日 星期五 22时47分59秒 CST // 设为上个星期五 $ date -v-fri 2020年 7月24日 星期五 22时57分33秒 CST ``` > 注意:若使用 `+1m` 时,若当前为 5 月 31 日,则结果会输出 6 月 30 日;若当前为 1 月 31 日,则结果根据平闰年为 2 月 28 日或 2 月 29 日,即月份往前一个月,但该日期不存在,会自动转换为下一个月的最后一天显示。 ### 同时设置多个项 ```sh // 设置为 12 月 31 日 $ date -v 12m -v 31d 2020年12月31日 星期四 22时37分11秒 CST // 设为 1 年后的 1 月份 $ date -v1m -v+1y 2021年 1月28日 星期四 22时55分30秒 CST ``` > 注意设置的顺序,最好按「年月日」顺序设置,否则,假如当前是 2 月份,使用 `date -v 31d -v 12m` 将无法设置成功,因为先设置为 2 月 31 日,这个时间实际是不存在的。使用 `date -v 12m -v 31d` 设置则不会出错。 # 参考 - [什么是标准时间?](http://www.timeofdate.com/articles/posts/standard-time.html)
所有评论(0)
暂无评论~_~