DT - DateTime wrapper that tries hard to DWYM
use DT qw(:pg); my $dt_now = DT->new(time); # Just works my $dt_fh = DT->new('2018-02-06T15:45:00-0500'); # Just works my ($pg_time_str) = $pg_dbh->selectrow_array("SELECT now();") my $dt_pg = DT->new($pg_time_str); # Also just works my $timestamp_notz = $dt_pg->pg_timestamp_notz; my $timestamp_tz = $dt->pg->pg_timestamp_tz;
DT is a very simple and thin wrapper over DateTime::Moonpig, which in turn is a wrapper over DateTime. DateTime::Moonpig brings immutability and saner operator overloading at the cost of cartoonish name but also lacks date/time parsing capabilities that are badly needed all the time.
There is a myriad of helpful modules on CPAN but all that typing!
Compare:
use DateTime; my $dt = DateTime->from_epoch(epoch => time); use DateTime::Format::Pg; my $dt = DateTime::Format::Pg->parse_datetime($timestamp_from_postgres); use DateTime::Format::ISO8601; my $dt = DateTime::Format::ISO8601->parse_datetime($iso_datetime);
With:
use DT ':pg'; my $dt_unix = DT->new(time); my $dt_pg = DT->new($timestamp_from_postgres); my $dt_iso = DT->new($iso_datetime);
DT constructor will try to Do What You Mean, and if it cannot it will fall back to default DateTime constructor. Simple.
DT also adds a few useful methods:
unix_time
A synonym for epoch. No special magic, just easier to remember.
epoch
pg_timestamp_notz
Format $dt object into a string suitable for PostgreSQL TIMESTAMP WITHOUT TIME ZONE type column.
TIMESTAMP WITHOUT TIME ZONE
pg_timestamp_tz
Format $dt object into a string suitable for PostgreSQL TIMESTAMP WITH TIME ZONE type column.
TIMESTAMP WITH TIME ZONE
To install this module type the following:
perl Makefile.PL make && make test && make install
DateTime::Moonpig is the parent class for DT. DateTime::Format::ISO8601 is required for parsing ISO8601 date/time formats.
DT
PostgreSQL related methods are optional and depend on DateTime::Format::Pg being installed.
No doubt there are some. Please post an issue on GitHub (see below) if you find something. Pull requests are also welcome.
GitHub repository: https://github.com/nohuhu/DT
Copyright (c) 2018 by Alex Tokarev <nohuhu@cpan.org>.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See "perlartistic".
To install DT, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DT
CPAN shell
perl -MCPAN -e shell install DT
For more information on module installation, please visit the detailed CPAN module installation guide.