DateTime::TimeZone::OffsetOnly - A DateTime::TimeZone object that just contains an offset


DateTime-TimeZone documentation Contained in the DateTime-TimeZone distribution.

Index


Code Index:

NAME

Top

DateTime::TimeZone::OffsetOnly - A DateTime::TimeZone object that just contains an offset

VERSION

Top

version 1.34

SYNOPSIS

Top

  my $offset_tz = DateTime::TimeZone->new( name => '-0300' );

DESCRIPTION

Top

This class is used to provide the DateTime::TimeZone API needed by DateTime.pm, but with a fixed offset. An object in this class always returns the same offset as was given in its constructor, regardless of the date.

USAGE

Top

This class has the same methods as a real time zone object, but the category() method returns undef.

DateTime::TimeZone::OffsetOnly->new ( offset => $offset )

The value given to the offset parameter must be a string such as "+0300". Strings will be converted into numbers by the DateTime::TimeZone::offset_as_seconds() function.

$tz->offset_for_datetime( $datetime )

No matter what date is given, the offset provided to the constructor is always used.

$tz->name()

$tz->short_name_for_datetime()

Both of these methods return the offset in string form.

AUTHOR

Top

Dave Rolsky <autarch@urth.org>

COPYRIGHT AND LICENSE

Top


DateTime-TimeZone documentation Contained in the DateTime-TimeZone distribution.

package DateTime::TimeZone::OffsetOnly;
BEGIN {
  $DateTime::TimeZone::OffsetOnly::VERSION = '1.34';
}

use strict;
use warnings;

use parent 'DateTime::TimeZone';

use DateTime::TimeZone::UTC;
use Params::Validate qw( validate SCALAR );

sub new {
    my $class = shift;
    my %p     = validate(
        @_, {
            offset => { type => SCALAR },
        }
    );

    my $offset = DateTime::TimeZone::offset_as_seconds( $p{offset} );

    die "Invalid offset: $p{offset}\n" unless defined $offset;

    return DateTime::TimeZone::UTC->new unless $offset;

    my $self = {
        name   => DateTime::TimeZone::offset_as_string($offset),
        offset => $offset,
    };

    return bless $self, $class;
}

sub is_dst_for_datetime {0}

sub offset_for_datetime       { $_[0]->{offset} }
sub offset_for_local_datetime { $_[0]->{offset} }

sub is_utc {0}

sub short_name_for_datetime { $_[0]->name }

sub category {undef}

sub STORABLE_freeze {
    my $self = shift;

    return $self->name;
}

sub STORABLE_thaw {
    my $self       = shift;
    my $cloning    = shift;
    my $serialized = shift;

    my $class = ref $self || $self;

    my $obj;
    if ( $class->isa(__PACKAGE__) ) {
        $obj = __PACKAGE__->new( offset => $serialized );
    }
    else {
        $obj = $class->new( offset => $serialized );
    }

    %$self = %$obj;

    return $self;
}

1;

# ABSTRACT: A DateTime::TimeZone object that just contains an offset




__END__