Protocol::XMLRPC::Value::DateTime - XML-RPC array


Protocol-XMLRPC documentation Contained in the Protocol-XMLRPC distribution.

Index


Code Index:

NAME

Top

Protocol::XMLRPC::Value::DateTime - XML-RPC array

SYNOPSIS

Top

    my $datetime = Protocol::XMLRPC::Value::DateTime->new(1234567890);
    my $datetime = Protocol::XMLRPC::Value::DateTime->parse('19980717T14:08:55');

DESCRIPTION

Top

XML-RPC dateTime.iso8601

METHODS

Top

new

Creates new Protocol::XMLRPC::Value::DateTime instance. Accepts unix epoch time.

parse

Parses dateTime.iso8601 string and creates a new Protocol::XMLRPC:::Value::Base64 instance.

type

Returns 'datetime'.

value

    my $datetime = Protocol::XMLRPC::Value::DateTime->new(1234567890);
    # $datetime->value returns 20091302T23:31:30

Returns serialized Perl5 scalar.

to_string

    my $datetime = Protocol::XMLRPC::Value::DateTime->new(1234567890);
    # $datetime->to_string is now '<dateTime.iso8601>20091302T23:31:30</dateTime.iso8601>'

XML-RPC datetime string representation.

AUTHOR

Top

Viacheslav Tykhanovskyi, vti@cpan.org.

COPYRIGHT

Top


Protocol-XMLRPC documentation Contained in the Protocol-XMLRPC distribution.

package Protocol::XMLRPC::Value::DateTime;

use strict;
use warnings;

use base 'Protocol::XMLRPC::Value';

require Time::Local;

sub type {'datetime'}

sub parse {
    my $class = shift;
    my ($datetime) = @_;

    my ($year, $month, $mday, $hour, $minute, $second) =
      ($datetime =~ m/(\d\d\d\d)(\d\d)(\d\d)T(\d\d):(\d\d):(\d\d)/);

    my $epoch;

    # Prevent crash
    eval {
        $epoch =
          Time::Local::timegm($second, $minute, $hour, $mday, --$month, $year);
    };

    return if $@ || $epoch < 0;

    return $class->new($epoch);
}

sub to_string {
    my $self = shift;

    my $value = $self->value;

    my ($second, $minute, $hour, $mday, $month, $year, $wday) = gmtime($value);

    $year += 1900;
    $month++;

    #19980717T14:08:55
    $value =
        $year
      . sprintf('%02d', $month)
      . sprintf('%02d', $mday) . 'T'
      . sprintf('%02d', $hour) . ':'
      . sprintf('%02d', $minute) . ':'
      . sprintf('%02d', $second);

    return "<dateTime.iso8601>$value</dateTime.iso8601>";
}

1;
__END__