从bash脚本获取十六进制时间戳

时间:2010-09-14 20:35:14

标签: bash time

我想将当前日期和时间转换为十六进制时间戳,例如:

Tue Feb 2 10:27:46 GMT 2010转换为0x6d054a874449e

我想从bash脚本中执行此操作,不知道我该怎么做?

由于 Ĵ

3 个答案:

答案 0 :(得分:6)

printf '0x%x' $(date +%s)

答案 1 :(得分:3)

在不知道你的十六进制时间戳的单位或纪元的情况下,很难肯定地说(我对你的“2月2日”的例子感到有些困惑,它甚至不接近当前日期!)。

date +%s会将当前日期转换为time_t,这是自通常的Unix时代(1970年1月1日午夜)以来的秒数。

printf "0x%x" some_number会将值从十进制转换为十六进制。

如果您需要转换为不同的纪元/单位,则需要进行一些计算。您可以使用bash

$(( expression ))中进行算术运算
$ time_t=$(date +%s)
$ echo $(($time_t * 1000))
1284505668000

如果你想转换一个任意日期(比如你的“2月2日......”示例),而不是当前日期,并且很高兴地假设你有date的GNU版本,那么你可以使用-d选项和+%s输出格式进行转换:

$ date -d 'Tue Feb 2 10:27:46 GMT 2010' +%s 
1265106466

将这一切放在一起的一个例子:

$ time_t=$(date -d 'Tue Feb 2 10:27:46 GMT 2010' +%s)
$ time_t_ms=$(($time_t * 1000))
$ hexstamp=$(printf "0x%x" $time_t_ms)
$ echo $hexstamp
0x1268e38b4d0

答案 2 :(得分:0)

自unix时代以来的秒数,以十六进制:

 echo "$(date +%s)"|xargs printf "0x%x"
 0x59a8de5b

自纪元以来的毫秒:

 echo "$(date +%s%N)/1000000"|bc|xargs printf "0x%x"
 0x15e3ba702bb

微秒:

echo "$(date +%s%N)/1000"|bc|xargs printf "0x%x"
0x55818f6eea775

纳秒:

echo "$(date +%s%N)"|xargs printf "0x%x"
0x14e0219022e3745c