Как рассчитать усеченный юлианский день в perl? - PullRequest
1 голос
/ 27 июля 2011

Мы использовали этот калькулятор юлианских дней, чтобы указывать номера релизов:

http://www.csgnetwork.com/juliantruncdateconv.html

Теперь мы хотим автоматизировать процесс сборки / выпуска и вставить номер сборки (из сегодняшнего дня).date) в соответствующий исходный код.

Как мне скопировать эту функцию TJD в perl?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Это похоже на работу:

#!perl
use POSIX;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

$yr = $year + 1900;
$mn = $mon + 1;
$hr = 0;
print "Current Date $mday-$mn-$yr\n";

# In leap years, -1 for Jan, Feb, else 0
$L = POSIX::ceil(($mn - 14) / 12);

$p1 = $mday - 32075 + POSIX::floor (1461 * ($yr + 4800 + $L) / 4);
$p2 = POSIX::floor (367 * ($mn - 2 - $L * 12) / 12);
$p3 = 3 * POSIX::floor (POSIX::floor (($yr + 4900 + $L) / 100) / 4);
$julian = $p1 + $p2 - $p3;        
$julian = $julian + ($hr / 24.0) - 0.5;

$tjd = $julian - 2440000.5;

print $tjd;

Похоже, это можно упростить, но это дает правильные числа

0 голосов
/ 27 июля 2011

Вы можете использовать модуль CPAN Time :: JulianDay, а затем урезать его самостоятельно.

Это должно работать:

    use Time::JulianDay;
    my $jd = julian_day($year, $month_1_to_12, $day);

И по указанной вами ссылке вы можете рассчитать TJD, вычтя JD - 2440000.5:

    $jd = $jd - 2440000.5;

См: http://metacpan.org/pod/Time::JulianDay

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...