我想将当前日期和时间转换为十六进制时间戳,例如:
Tue Feb 2 10:27:46 GMT 2010转换为0x6d054a874449e
我想从bash脚本中执行此操作,不知道我该怎么做?
由于 Ĵ
答案 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