1#!/usr/bin/perl -w 2 3use strict; 4 5use Test::More tests => 16; 6 7use DateTime; 8 9# Borrowed from Matt Sergeant's Time::Piece 10 11# A table of MJD and components 12my @mjd = ( '51603.524' => 13 { year => 2000, 14 month => 2, 15 day => 29, 16 hour => 12, 17 minute => 34, 18 second => 56, 19 }, 20 21 '40598.574' => 22 { year => 1970, 23 month => 1, 24 day => 12, 25 hour => 13, 26 minute => 46, 27 second => 51, 28 }, 29 30 '52411.140' => 31 { year => 2002, 32 month => 5, 33 day => 17, 34 hour => 3, 35 minute => 21, 36 second => 43, 37 }, 38 39 '53568.547' => 40 { year => 2005, 41 month => 7, 42 day => 17, 43 hour => 13, 44 minute => 8, 45 second => 23, 46 }, 47 48 '52295.218' => 49 { year => 2002, 50 month => 1, 51 day => 21, 52 hour => 5, 53 minute => 13, 54 second => 20, 55 }, 56 57 '52295.399' => 58 { year => 2002, 59 month => 1, 60 day => 21, 61 hour => 9, 62 minute => 35, 63 second => 3, 64 }, 65 66 # beginning of MJD 67 '0.000' => 68 { year => 1858, 69 month => 11, 70 day => 17, 71 hour => 0, 72 minute => 0, 73 second => 0, 74 }, 75 76 # beginning of JD 77 '-2400000.500' => 78 { year => -4713, 79 month => 11, 80 day => 24, 81 hour => 12, 82 minute => 0, 83 second => 0, 84 }, 85 ); 86 87while ( my ( $mjd, $comps ) = splice @mjd, 0, 2 ) 88{ 89 my $dt = DateTime->new( %$comps, 90 time_zone => 'UTC', 91 ); 92 93 is( sprintf( '%.3f', $dt->mjd ), $mjd, "MJD should be $mjd" ); 94 95 my $jd = sprintf( '%.3f', $mjd + 2_400_000.5 ); 96 is( sprintf( '%.3f', $dt->jd ), $jd, "JD should be $jd" ); 97} 98