Dateクラス

Date::Simpleつかえ!!とか思うけど、
さっきJavascriptで作ったのをPerlでやってみよと思ってやってみた。
10分足していく処理を書いたとして、 フォーマット文字列の分の部分が60越えても時間になおるので
便利かなーかなーーと思ったけど、どうだろうか。

package Date;

use strict;

my $time = 0;
my $init = sub{
  my $self = shift;
  $self->set_time(shift);
  return $self;
};

sub new{$init->(bless({},shift),@_)}
sub set_time{$time = ($_[1] or time)}
sub get_time{$time}

sub format{
  my ($sec,$min,$hours,$mday,$mon,$year) = gmtime($time  + 9 * 3600);
  return sprintf(q{%04d/%02d/%02d %02d:%02d:%02d},$year+1900,$mon+1,$mday,$hours,$min,$sec);
}

sub at{
  my $self = shift;
  my $_time = shift;
  my %p;
  if($_time =~ /^(?d{1,2}):?(?d{1,2})?:?(?d{1,2})?$/){
    $p{hours} = ($1-0 or 0);
    $p{minutes} = ($2-0 or 0);
    $p{seconds} = ($3-0 or 0);
  }
  my ($sec,$min,$hours) = gmtime($time + 9 * 3600);
  my $diff = ($sec - $p{seconds}) + ($min - $p{minutes}) * 60 + ($hours - $p{hours}) * 3600;
  $time -= $diff;
  return $self;
}

1;
# ここからサンプル
my $d = Date->new;
print $d->format().qq{?n};
print Date->new->at('12')->format().qq{?n}; # 12 o'clock
print Date->new->at('1:65:70')->format().qq{?n}; # 2:06:10