Changeset 347

Show
Ignore:
Timestamp:
11/14/06 05:58:56 (2 years ago)
Author:
ogawa
Message:

Now checks datetime format more strictly.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • WWW-CybozuOffice6-Calendar/trunk/lib/WWW/CybozuOffice6/Calendar.pm

    r346 r347  
    8282    my $start = $this->to_datetime($fields[3], $fields[5]); 
    8383    my $end   = $this->to_datetime($fields[4], $fields[6]); 
    84     if ($fields[5] =~ /^:$/) {          # full-day event 
     84    return unless $start && $end; 
     85    if ($fields[5] eq ':') {            # full-day event 
    8586        $start = $start->truncate(to => 'day'); 
    8687        $end   = $end->add(days => 1)->truncate(to => 'day'); 
    8788        $is_full_day = 1; 
    88     } elsif ($fields[6] =~ /^:$/) {     # event w/o endtime 
     89    } elsif ($fields[6] eq ':') {       # event w/o endtime 
    8990        $end   = $start->clone->add(minutes => 10); 
    9091    } 
    9192 
    92     my($created) = $fields[1] =~ m/ts\.(\d+)/; 
    93     $created = DateTime->from_epoch(epoch => $created); 
     93    my($created) = $fields[1] =~ m/^ts\.(\d+)$/; 
     94    $created = DateTime->from_epoch(epoch => $created || 0); 
    9495 
    9596    my $summary = $fields[11] || ''; 
     
    126127        $item->{frequency} = $FREQUENCY{$freq}; 
    127128        $item->{frequency_value} = $fields[8] || 0; 
    128         $item->{until} = $this->to_datetime($fields[4], '0:0:0') 
    129             unless $fields[4] =~ m!^//$!; 
     129        $item->{until} = $this->to_datetime($fields[4]) 
     130            if $fields[4] ne '//'; 
    130131    } 
    131132 
     
    135136sub to_datetime { 
    136137    my $this = shift; 
    137     my @d = split '/', $_[0] || ''; 
    138     my @t = split ':', $_[1] || ''; 
    139     my %args = ( 
    140         year      => $d[0], 
    141         month     => $d[1], 
    142         day       => $d[2], 
    143         hour      => $t[0] || 0, 
    144         minute    => $t[1] || 0, 
    145         second    => $t[2] || 0, 
    146         time_zone => $this->{time_zone} || 'Asia/Tokyo', 
    147     ); 
    148     if ($args{hour} >= 24) { 
    149         $args{hour}   = 23; 
    150         $args{minute} = 59; 
    151         $args{second} = 59; 
    152     } 
     138    my($ymd, $hms) = @_; 
     139 
     140    my %args; 
     141    return unless $ymd && $ymd =~ m!^(\d+)/(\d+)/(\d+)$!; 
     142    @args{qw(year month day)} = ($1, $2, $3); 
     143 
     144    $hms = '0:0:0' unless $hms && $hms ne ':'; 
     145    return unless $hms =~ m!^(\d+):(\d+)(?:\:?(\d+)?)$!; 
     146    @args{qw(hour minute second)} = ($1, $2, $3 || 0); 
     147    @args{qw(hour minute second)} = (23, 59, 59) if $args{hour} > 23; 
     148 
     149    $args{time_zone} = $this->{time_zone} || 'Asia/Tokyo'; 
     150 
    153151    DateTime->new(%args); 
    154152}