[pm-h] JSON Dates and DateTime

Mark Allen mrallen1 at yahoo.com
Mon Feb 17 12:34:07 PST 2014


Looks good; just saw it pop up on @cpan_new - thanks for releasing it to CPAN for anyone else who needs to solve this problem.

Mark



On Monday, February 17, 2014 1:52 PM, Michael R. Davis <mrdvt92 at yahoo.com> wrote:
 
Perl Folks,
 
>> I need to call a JSON web service with dates.  ...  '/Date(1392233750000-0600)/'

> As far as I am aware, JSON supports auto-serialization of a blessed object only if allow_blessed => 1 and convert_blessed => 1.
 
Just to follow up on JSON Dates.  So, after much research I've found out that this JSON date format is called the MicrosoftDateFormat.  It was only used in JSON.NET framework 4.5 and is now a defunct standard in favor of ISO standard for dates.
 
So, I went ahead and bit the bullet and wrote a DateTime formatter.  I've called it DateTime::Format::JSON::MicrosoftDateFormat.
 
But, the API is just like any other date time formatter object except that it optionally loads the DateTime::TO_JSON subroutine in the import section of the package.
 
    *DateTime::TO_JSON=sub {shift->_stringify};

So, JSON serialization of DateTime objects will be automatic.  De-serialization is still manual at this time as there appears to be no way to identify the date data without scanning all values.  I'll most likely implement some kind of object key de-serialization mechanism.
Thanks,
Mike
 
Example Script
 
perl -e '
use strict;
use warnings;
use JSON;
use DateTime;
use
 DateTime::Format::JSON::MicrosoftDateFormat (to_json=>1);
 
my $formatter=DateTime::Format::JSON::MicrosoftDateFormat->new;
 
print $formatter->parse_datetime("/Date(1392606509000)/"),      "\n";
print $formatter->parse_datetime("/Date(1392089278000-0600)/"), "\n";
print $formatter->parse_datetime("/Date(1392067678000)/"),      "\n";
 
my $dt=DateTime->now;
$dt->set_formatter($formatter); #we still need to set the formatter
print
 "$dt\n";                  #"" overloaded
print JSON->new->convert_blessed->encode($dt), "\n"; #JSON calls DateTime->TO_JSON
'
2014-02-17T03:08:29
2014-02-10T21:27:58
2014-02-10T21:27:58
/Date(1392666175000)/
"/Date(1392666175000)/"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/mailman/private/houston/attachments/20140217/5721a778/attachment.html>


More information about the Houston mailing list