Mac下的date命令是BSD系的, Linux下date命令是GNU系的,两者的用法有一些区别,罗列如下:
共同点
基本的时间格式的缩写是相同的,规则如下:
- %Y 表示四位数形式的年份, 比如2017
- %m 表示带前导0的月份,比如02,12
- %d 表示带前导0的日子, 比如 02,28
- %H 表示带前导0的24小时, 比如 01, 23
- %M 表示带前导0的分钟数, 比如 05, 22
- %S 表示带前导0的秒数, 比如 06,45
- %s 表示距离格林威治时间(1970年1月1日0点)的秒数
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # Macos $ date 2017年 8月 4日 星期五 14时31分00秒 CST $ date +%Y%m%d%H%M%S 20170804143107 $ date +%Y%m%d%H%M%S 20170804143112 $ # Linux(Centos) $ date 2017年 08月 04日 星期五 06:31:33 UTC $ date +%Y%m%d%H%M%S 20170804063135 $ date +%s 1501828299 $
|
不同点
获取前一天和获取后一天的写法不同
Macos 下通过使用-v
参数时间,-v-1d
代表前一天, -v-1y
代表上一年
Linux 下通过--date
参数实现, --date='-1 day'
代表前一天, --date='-1 year'
代表上一年
1 2 3 4 5 6 7 8 9 10 11
| # Macos $ date -v-1d -v-1y +%Y-%m-%d 2016-08-03 $ # Linux $ date +%Y-%m-%d --date='-1 day -1 year' 2016-08-03 $
|
检查平台来决定如何使用date
可以使用uname -s
的输出来判定是哪个平台,Linux下命令输出是Linux
, Macos下命令输出是Darwin
.
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash os=$(uname -s) if [[ "$os" == "Linux" ]]; then date +%Y-%m-%d --date='-1 day -1 year' elif [[ "$os" == "Darwin" ]]; then date -v-1d -v-1y +%Y-%m-%d else echo "unknown OS" exit 1 fi
|