如何用perl计算截断的朱利安日?

时间:2011-07-27 09:30:54

标签: perl date

我们一直使用这个Julian Day计算器作为发布号码:

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

现在我们想要自动化构建/发布过程并将构建号(从今天的日期)插入到相关的源代码中。

如何在perl中复制这个TJD函数?

2 个答案:

答案 0 :(得分:1)

这似乎有效:

#!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;

看起来可以简化,但这会给出正确的数字

答案 1 :(得分:0)

您可以使用CPAN模块Time :: JulianDay然后自行截断它。

这应该有效:

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

根据您提供的链接,您可以通过减去JD来计算TJD - 2440000.5:

    $jd = $jd - 2440000.5;

请参阅: http://metacpan.org/pod/Time::JulianDay