shell 命令行处理时间(date)

获取时间戳
1
2
3
4
5
6
# 纳秒
date +%s%N
# 毫秒
echo $[$(date +%s%N)/1000000]
# 秒
date +%s
获取当前时间
1
2
3
4
date                          # Tue Jun  9 18:54:00 CST 2020
date "+%Y-%m-%d %H:%M:%S" # 2020-06-09 18:54:15
date "+%Y-%m-%d %H:%M:%S %Z" # 2020-06-09 19:01:43 CST
date "+%F %T %z" # 2020-06-09 19:02:40 +0800 # 使用小"z",显示的时区更直观一些
获取过去的时间
1
2
3
4
# 获取昨天时间
date -d yesterday "+%Y-%m-%d %H:%M:%S" # 2020-06-08 18:58:19
# 获取前三天的时间
date -d -3day "+%Y-%m-%d %H:%M:%S" # 2020-06-06 18:59:12
时间转时间戳
1
2
3
4
date -d "2019-04-24T05:49:10Z" +%s           # 1556084950
date -d "Tue Jun 9 18:54:10 CST 2020" +%s # 1591700050
# 时间里面没有时区信息的会以当前系统的时区为标准
date -d "2020-06-09 18:54:15" +%s # 1591700055
时间戳转时间

TZ 如果没有指定,则使用 /etc/localtime 中的设置

1
2
TZ=UTC-0 date --date='@1591700055' "+%Y-%m-%d %H:%M:%S %z"  # 2020-06-09 10:54:15 +0000
date --date='@1591700055' "+%Y-%m-%d %H:%M:%S %z" # 2020-06-09 18:54:15 +0800
时区转换
1
2
3
4
5
# 默认转换为当前系统的时区
date -d"2019-04-24T05:49:10Z" +"%Y-%m-%d %H:%M:%S %z" # 2019-04-24 13:49:10 +0800

# 如果设置了TZ=UTC-0,则输出的时间为UTC-0时间,“+8 hour”相当于在原本的时间基础上加了8小时
TZ=UTC-0 date --date="2019-04-24T05:49:10Z +8 hour" +"%Y-%m-%d %H:%M:%S %Z" # 2019-04-24 13:49:10 UTC
时区设置(TZ)

TZ变量只会影响系统时钟,不会更改整个系统的时区设置。要更改整个系统的时区,需要使用其他工具,例如 timedatectl命令或 tzselect命令。

1
2
3
4
5
6
7
8
9
10
# 以下是如何将 TZ变量设置为不同时区的几个示例
TZ=UTC-0
TZ=UTC-8
TZ=Asia/Shanghai
# 直接按时区设置更方便
# 中时区 UTC-0
# 西1—12区 UTC+1 ... UTC+12
# 东1—12区 UTC-1 ... UTC-12
# 比如北京时间东八区 TZ=UTC-8
TZ=UTC-8 date +"%Y-%m-%d %H:%M:%S %z" # 2020-06-09 21:02:40 +0800
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2024 Outsrkem
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信