From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

XML::SRS::TimeStamp::Role - composable timestamp attributes

SYNOPSIS

use Moose;
with 'XML::SRS::TimeStamp::Role', 'XML::SRS::Node';

DESCRIPTION

Sometimes, in the SRS schema, a timestamp is represented with its own node, <TimeStamp>;

<TimeStamp Hour="12" Minute="24" Second="0"
Day="31" Month="1" Year="2010"
TZOffset="+12:00" />

For this purpose, the concrete class XML::SRS::TimeStamp is used.

However, when the attributes which represent the also appear alongside other child elements or attributes, a concrete class would not be appropriate to re-use. In that case, the role XML::SRS::TimeStamp::Role must be composed.

An example of this is the XML::SRS::Domain::Transferred class, as in:

<DomainTransfer
Hour="12" Minute="24" Second="0"
Day="31" Month="1" Year="2010"
TZOffset="+12:00">
<TransferredDomain>foo.co.nz</TransferredDomain>
</DomainTransfer>

To avoid repetition, this class exists.

It also adds various properties and psuedo-properties for convenience, such as:

timestamptz

(cached, derived, psuedo) this is a psuedo-property, which returns the value of the timestamp within as an ISO-8601 timestamp, without the T, and with a timezone offset (defaulting to the offset of this time according to local rules). The XML::SRS::TimeStamp class has a BUILDARGS class method which allows this to be a "psuedo-property"; you can pass it to XML::SRS::TimeStamp->new, and it will fill in all the other required accessors.

eg

XML::SRS::TimeStamp->new(
timestamptz => "2010-12-12 12:12:12+12:00",
);

Will create an object:

bless(
{
'hour' => '12',
'month' => '12',
'second' => '12',
'tz_offset' => '+1200',
'minute' => '12',
'day' => '12',
'timestamptz' => '2010-12-12 12:12:12+1200',
'year' => '2010'
},
'XML::SRS::TimeStamp'
);
timestamp

(cached, derived, psuedo) Like timestamp, but you don't end up setting the tz_offset property if passed in for construction, and it does not have a time zone.

epoch

(cached, derived, psuedo) Like timestamptz, but the time is expressed as a unix epoch time without a timezone.

in construction it will also use the local time rules:

perl -MXML::SRS::TimeStamp -MYAML -E 'say XML::SRS::TimeStamp->new(
epoch => time(),
)->dump;'
$VAR1 = bless( {
'hour' => '21',
'epoch' => 1283200164,
'month' => '08',
'second' => '24',
'tz_offset' => '+0100',
'minute' => '29',
'day' => '30',
'year' => '2010'
}, 'XML::SRS::TimeStamp' );

(Above is a summer time time)

perl -MXML::SRS::TimeStamp -MYAML -E 'say XML::SRS::TimeStamp->new(
epoch => time()+6*30*86400,
)->dump;'
$VAR1 = bless( {
'hour' => '20',
'epoch' => 1298752226,
'month' => '02',
'second' => '26',
'tz_offset' => '+0000',
'minute' => '30',
'day' => '26',
'year' => '2011'
}, 'XML::SRS::TimeStamp' );

(and for comparison, a non-daylight savings time)

XML::SRS::Time and XML::SRS::Date

These roles contain the component parts of Date and Time, to keep them independent. XML::SRS::TimeStamp::Role composes both of these. They are not used by any other classes.

SEE ALSO

XML::SRS

AUTHOR AND LICENCE

Development commissioned by NZ Registry Services, and carried out by Catalyst IT - http://www.catalyst.net.nz/

Copyright 2009, 2010, NZ Registry Services. This module is licensed under the Artistic License v2.0, which permits relicensing under other Free Software licenses.