生信服务器 | Linux 时间戳和标准时间

在 Linux 系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数。如/etc/shadow里的密码更改日期和失效日期,还有代理服务器的访问日志对访问时间的记录等等。

c7f85c0a-9c3d-4083-8fa5-e9da80f51120.png

对于不管是单台还是集群式的生信服务器,一个大任务长时间运行,设置和分析处理 log,对于任务的稳健持续运行很判断都非常有帮助,而这一切都需要和服务器的时间戳、标准时间息息相关。

关于时间格式的解释

  • UTC  (Universal Time Coordinated,UTC),世界协调时间

  • CST  (China Standard Time UTC+8:00),中国沿海时间(北京时间)

  • GMT  (Greenwich Mean Time),林威治标准时间

  • EST (Eastern Standard Time),美国东部时间

查看 Linux 系统时区

1. 使用传统的 date 命令

Linux 下使用传统的date命令,会自动打印出当前时间和时区缩写。

[shenweiyan@ecs-steven ~]# date
Wed Jan 20 09:55:04 CST 2021

[shenweiyan@cloudraft-bioitee ~]# date
Tue Jan 19 20:55:51 EST 2021

或者,你也可以使用下面的命令。其中%Z格式可以输出字符形式的时区,而%z输出数字形式的时区:

[shenweiyan@ecs-steven ~]# date +"%Z %z"
CST +0800

[shenweiyan@cloudraft-bioitee ~]# date +"%Z %z"
EST -0500

2. 使用 timedatectl 命令

当你不带任何参数运行它时,这条命令可以像下图一样,输出系统时间概览,其中包含当前时区:

timedatectl
0d1f9151-7833-41c0-a5f9-fe09e104a134.png

然后,你可以在命令中提供一条管道,然后用 grep 命令来像下面一样,只过滤出时区信息:

[shenweiyan@cloudraft-bioitee ~]#  timedatectl | grep "Time zone"
       Time zone: America/New_York (EST, -0500)

同样,我们可以学习如何使用timedatectl来设置 Linux 时区。例如:

sudo timedatectl set-timezone 'Asia/Shanghai'

时间戳格式和标准时间格式互转

下面介绍几种时间戳格式和标准时间格式转换的方法。

需要注意,Linux 下如果每个用户对应的时区如果不一样,他们获取的时间戳、标准时间也会不一样,虽然转换的方法是一样的,但注意不要跨时区去转换,即在 CST 中获取的时间戳和标准时间不要在 CST 以外的时区进行转换。如果非要转换,一定要加上时区的差异。

1. 分别以标准格式和时间戳来显示当前时间

使用 Linux 自带的date命令,分别以标准格式和时间戳来显示当前时间。

[shenweiyan@ecs-steven ~]# date
Wed Jan 20 09:30:54 CST 2021
[shenweiyan@ecs-steven ~]# date +%s
1611106272

2. 显示指定时间的时间戳

使用 Linux 自带的date命令,显示指定时间的时间戳。

[shenweiyan@ecs-steven ~]# date -d "2021-01-20 10:25:30" +%s
1611109530

3. 将时间戳转换为标准时间格式

方法 1:使用 date 命令
[shenweiyan@ecs-steven ~]# date -d '@1611109530'
Wed Jan 20 10:25:30 CST 2021

[shenweiyan@ecs-steven ~]# date -d "1970-01-01 utc 1611109530 seconds"
Wed Jan 20 10:25:30 CST 2021

[shenweiyan@ecs-steven ~]# date -d "1970-01-01 18647 days" "+%Y/%m/%d %H:%M:%S"
2021/01/20 00:00:00

[shenweiyan@ecs-steven ~]# date -d "@1611109530" +"%Y%m%d %H:%M:%S"
20210120 10:25:30

[shenweiyan@ecs-steven ~]# date -d "@1611109530" +"%F %H:%M:%S"
2021-01-20 10:25:30

[shenweiyan@ecs-steven ~]# date -d "1970-01-01 utc 1611109530 seconds" +"%F %H:%M:%S"
2021-01-20 10:25:30

方法 2:使用 awk 里的时间函数
[shenweiyan@ecs-steven ~]# echo "1611109530" |awk '{print strftime ("%F %T",$0)}'
2021-01-20 10:25:30

方法 3:使用 perl 处理
[shenweiyan@ecs-steven ~]# perl -e 'print localtime(1279592730)."\n";'
Tue Jul 20 10:25:30 2010

方法 4:使用 python 处理
[shenweiyan@ecs-steven ~]# python -c "import time; print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1611109530)))"
2021-01-20 10:25:30


589bbf22-6cb3-45c3-b259-0db7221c64d2.png — END—




d6e0462a-a93c-4f6d-a4dc-0621d606fe8c.gif


Python 日期和时间函数使用指南

2019-09-21

a3239f3b-36ab-4d6b-b84c-18e292be0687.jpg

Linux下程序时间消耗监控与统计

2018-07-07

2afbde3d-1bd2-4cff-b57a-e261a5b31a73.jpg

Linux 下的动态库、静态库与环境变量

2019-09-07

c9815298-230a-4179-a7cf-ded5f30b20c4.jpg

生信服务器入门级基本设置

2020-06-05

6e2f8a86-9090-4f7c-8021-1f1635195d46.jpg

CentOS Linux 7 安全基线设置

2019-05-26

fbed7aec-f513-4906-9868-1a51043cc4e2.jpg


6300a8d2-7b16-4b5d-854e-5d8978853cf7.png


本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值