Не зная единицы измерения или эпохи для вашей шестнадцатеричной метки времени, трудно сказать наверняка (и я был слегка смущен вашим примером «2 февраля», который даже близко не соответствует текущей дате!).
date +%s
преобразует текущую дату в time_t
, количество секунд с обычной эпохи Unix (которая наступает в полночь 1 января 1970 года).
printf "0x%x" some_number
преобразует значение из десятичного числа в шестнадцатеричное.
Если вам нужно конвертировать в другую эпоху / единицу, вам нужно будет сделать некоторые вычисления. Вы можете сделать арифметику в bash
используя $(( expression ))
:
$ time_t=$(date +%s)
$ echo $(($time_t * 1000))
1284505668000
Если вы хотите преобразовать произвольную дату (например, ваш пример «2 февраля ...»), а не текущую, и готовы предположить, что у вас версия GNU date
, вы можете использовать опция -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