Changeset 623

Show
Ignore:
Timestamp:
03/21/07 14:30:51 (6 years ago)
Author:
max
Message:

Bugfix exact switchover time for DST: need to do it in GMT

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • grabbers/oztivo

    r622 r623  
    33# OzTivo grabber 
    44 
    5 my $version = '0.21'; 
     5my $version = '0.22'; 
    66 
    77# Requires configuration! 
     
    401401    { 
    402402        # Is Sydney in DST? 
    403         my $sydney_dst = compare_sydney_dst($local_dst); 
     403        my $sydney_dst = compare_sydney_dst(); 
    404404        POSIX::tzset(); 
    405405 
     
    407407        { 
    408408            my $offset = ' +0100'; 
    409             print "DST in Sydney but not here: adding 1 hour to ABC2 times" . 
     409            print "DST in Sydney but not here: adding 1hr to ABC2 times" . 
    410410                  ($sydney_dst != 1 ? ($sydney_dst > 1 ?  
    411                           " from $sydney_dst" :  
    412                           " until " . ($sydney_dst*-1)) : '') . 
     411                          " from $sydney_dst GMT" :  
     412                          " until " . ($sydney_dst*-1) . ' GMT') : '') . 
    413413                  ".\n"; 
    414414            $data =~ s/(?!=")(\d+)(?=".* channel="ABC2")/$1.add_offset($1,$sydney_dst)/ge; 
     
    436436# Returns: 
    437437# 0         : Sydney is not in DST in the next 7 days 
    438 # <n>       : Sydney is in DST from <n>, where n is (eg) 200703210300 
    439 # <-n>      : Sydney is in DST until <n>, where n is (eg) -200703210300 
     438# 1         : Sydney is in DST for the next 7 days 
     439# <n>       : Sydney is in DST from <n> GMT, where n is (eg) 20070321030000 
     440# <-n>      : Sydney is in DST until <n> GMT, where n is (eg) -20070321030000 
    440441sub compare_sydney_dst 
    441442{ 
    442     my $local_dst = shift; 
    443  
    444443    local %ENV; 
    445444    $ENV{TZ} = 'Australia/Sydney'; 
     
    447446    my $sydney_dst = (localtime)[8]; 
    448447 
    449     return $sydney_dst if ($sydney_dst == $local_dst); 
    450  
     448    # Normalize $start to 3AM Sydney time, or 2AM if it's in DST 
    451449    my $start = time - (time % (60*60*24)) - (($sydney_dst ? 11 : 10) * 60*60) + (3*60*60); 
     450 
     451    # Check Sydney's DST status each day for 7 days 
    452452    for (my $day = 0; $day < 7; $day++) 
    453453    { 
    454454        my $t = $start + ($day * 24*60*60); 
    455455        my $dst_thisday = (localtime($t))[8]; 
     456 
     457        # Any changeover? 
    456458        if ($dst_thisday != $sydney_dst) 
    457459        { 
     460            # Convert $t to GMT 
     461            $t -= (($sydney_dst ? 11 : 10) * 60*60); 
    458462            my $changeoverday = POSIX::strftime("%Y%m%d%H%M%S", localtime($t)); 
    459463            $changeoverday *= -1 if ($sydney_dst); 
  • status

    r622 r623  
    55grabber         abc2_website        2.11 
    66grabber         sbsnews_website     0.11 
    7 grabber         oztivo              0.21 
     7grabber         oztivo              0.22 
    88grabber         jrobbo              0.08 
    99grabber         ninemsn             0.14