Предполагая, что это число, как @blahdiblah говорит
"значение, представляющее число микросекунд с 1 января 4713 г. до н.э."
Тогда вам сначала нужно узнатьюлианская временная метка для 01 января 1970 года, которая является эпохой для времени Unix.Таким образом, грубый запрос оракула дает
210866803200000000
Тогда вы могли бы в теории просто иметь команду оболочки для вычисления количества секунд с 1 января 1970 года.
unixtime=$(( ( 212186319010244541 - 210866803200000000 ) / 1000000 ))
С этим связаны следующие проблемы:
- вам все еще нужно отформатировать его
- ваш bash может не соответствовать целочисленной арифметике с 18-значными числами.(думаю, что все в порядке в 64-битной, но не в 32-битной версии).
Теперь, если у вас установлен Perl, вы можете решить их с помощью модулей bigint
и POSIX
.Как оболочка «один» лайнер выглядит как
perl -mbigint -mPOSIX -e 'print( POSIX::strftime("%Y-%m-%d %T",localtime( ($ARGV[0]-210866803200000000)/1000000 ) )."\n")' 212186319010244541
, что дает
2011-10-25 15:10:10
Разница в 1 час, вероятно, связана с разницей в летнем времени.Это может быть либо в perl, либо, скорее всего, значение, которое я использовал для 01 января 1970 года, может быть часом.Поэтому вам, возможно, придется проверить их обоих, чтобы убедиться, что они подходят для вашей системы.