Heiko Klein schreef:
> The DateTime module allows handling of a large range of dates, much
> larger than the standard unix epoch (from ~1901 to ~2038). This is
> really nice. But when calling the DateTime->from_epoch(epoch => 2**31)
> gives not 2038 as I hoped for, but 1901 due to an internal call to gmtime.
Hi Heiko,
You may want to take a look at DateTime::Format::Epoch::Unix. It does not use
gmtime internally, and may therefore be slower than the from_epoch() method,
but it does return the correct results for the years you are interested in:
use DateTime;
use DateTime::Format::Epoch::Unix;
$dt = DateTime::Format::Epoch::Unix->parse_datetime(1e10);
print "$dt\n"
# output: 2286-11-20T17:46:40
If you work with even larger numbers, you can make DateTime::Format:Epoch use
Math::BigInt, but that is not necessary in your case.
> Wouldn't it be possible to implement this directly into the from_epoch
> routine. Caveats would be missing leap-seconds before 1901 and after
> 2038. (Any more?) But at least dates up to year 5million would be possible.
At least in Unix, leap seconds are not counted, so that is not a problem in
your workaround.
Eugene