Bash Shell日期和时间转换为纪元秒

Bash Shell日期和时间转换为纪元秒,你想将日期和时间转换为纪元秒,以便执行日期和时间运算。

解决方案

使用 GNU date 命令,配合非标准选项 -d 和标准格式 %s

#“当前时间”很容易得到
$ date '+%s'
1131172934

# 其他时间需要用到非标准选项-d
$ date -d '2005-11-05 12:00:00 +0000' '+%s'
1131192000

纪元秒就是从纪元(1970 年 1 月 1 日午夜,也就是 1970-01-01T00:00:00)开始算起的秒数。该命令从纪元开始,加上纪元秒数,显示出你想得到的日期和时间。

讨论

如果你手边没有 GNU date 命令可用,这个问题就麻烦了。我们建议你尽一切可能获取并使用该版本。实在不行,也可以使用 Perl。以下给出了 3 种正确输出当前纪元秒的方法。

$ perl -e 'print time, qq(\n);'
1154158997

# 同上
$ perl -e 'use Time::Local; print timelocal(localtime()) . qq(\n);'
1154158997

$ perl -e 'use POSIX qw(strftime); print strftime("%s", localtime()) . qq(\n);'
1154159097

鉴于 Perl 所采用的日期 / 时间结构,用 Perl 来转换特定日期和时间要比转换“当下”(right now)更难。年份从 1900 年开始,月份(不是天数)从 0 开始(不是从 1)。函数格式为:timelocal(sec, min, hour, day, month-1, year-1900)。因此,要想将 2005-11-05 06:59:49 转换为纪元秒:

# 给定时间为本地时间
$ perl -e 'use Time::Local;
> print timelocal("49", "59", "06", "05", "10", "105") . qq(\n);'
1131191989

# 给定时间为UTC时间
$ perl -e 'use Time::Local;
> print timegm("49", "59", "06", "05", "10", "105") . qq(\n);'
1131173989

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!