my $dt = DateTime->today; say $dt, " = ", $dt->jd; $dt->subtract(days => $dt->jd, hours => 12); # days implicitly truncated to int say $dt, " = ", $dt->jd; #### 2015-06-29T00:00:00 = 2457202.5 -4713-11-24T12:00:00 = 0 #### my $jd_to_convert = 2457205.09613609; my $dt = DateTime->new(year => -4713, month => 11, day =>24, hour => 12)->add(days => $jd_to_convert); say $dt, " = ", $dt->jd; #### 2015-07-01T12:00:00 = 2457205 #### sub jd2dt { # convert JD to DateTime my $jd_to_convert = shift; my $days = int $jd_to_convert; # that odd date is "julian day zero", converted to "proleptic" gregorian calendar my $dt = DateTime->new(year => -4713, month => 11, day =>24, hour => 12, time_zone => DateTime::TimeZone->new( name => 'UTC' ))->add(days => $days); $dt->add(hours => 24 * ($jd_to_convert - $days)); return $dt; # 2017-06-13 added this line for clarity }