18-значный юлианский метка времени в Perl

Мне нужно получить 18-значную метку времени Джулиана в моем скрипте Perl. Может ли кто-нибудь помочь мне в этом? Однако я написал подпрограмму для достижения этой цели, но она не выглядит хорошо для меня, так как она всегда дает мне число, заканчивающееся 6 нулями. Пожалуйста, помогите получить правильную 18-значную метку времени J.

sub GetJulianTimestamp()
{
  my $t = `perl -e 'print time, "\n"'`;
  return (($t * 1000000 ) + 210866803200000000);
}

2 ответа

Решение

Основываясь на комментариях, вы, кажется, спрашиваете, как получить количество микросекунд с начала эпохи Unix.

use Time::HiRes qw( );

my $microsec_time = int( Time::HiRes::time() * 1_000_000 );
return 210866803200000000 + $microsec_time;

Я согласен с ответом, данным ikegami, за исключением того, что сумма, которая будет добавлена ​​в эпоху Unix, должна быть изменена. Значение 210866803200000000 соответствует 24 ноября 4714 г. до н.э., 00:00 по универсальному времени, григорианскому календарю. Но эпоха юлианских дат - полдень, а не полночь. Таким образом, сумма, которая будет добавлена, должна составить 210 866 760 000 000 000. И, конечно же, нет никакого официального названия для юлианской даты, которая была бы преобразована в микросекунды, поэтому любой, кто использует такое число, должен будет дать объяснение любому, кто получает данные.

Другие вопросы по тегам