Changeset 724

Show
Ignore:
Timestamp:
06/02/07 04:24:58 (6 years ago)
Author:
paul
Message:

Add new xmltvtimez and timezxmltv.

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • references/Shepherd/Common.pm

    r713 r724  
    1818use POSIX qw(strftime mktime); 
    1919 
    20 my $version = '0.13'; 
     20my $version = '0.14'; 
    2121 
    2222my $gmt_offset; 
     
    484484########################################################################## 
    485485 
     486# Convert yyyymmddhhmmss +hhmm format to calendar time. 
     487# Use $zone to override with true timezone name. eg. ':localtime', ':Australia/Sydney', ':UTC'. 
     488# Use $default_zone to set a zone when none if found in $xmltv. Defaults to localtime. 
     489# Returns $time in UTC and $z is its zone. 
     490# eg. my @timez = xmltvtimez("200706021800 +1100", ":Australia/Sydney"); 
     491sub xmltvtimez { 
     492    my ($xmltv, $zone, $default_zone) = @_; 
     493 
     494    my ($Y, $M, $D, $h, $m, $s, $z) = 
     495            $xmltv =~ /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})? ?([+-]\d{4})?/ or 
     496            die "Can't interprete xmltvtime \"$xmltv\"."; 
     497 
     498    $z = $zone || ( $z ? "aus$z" : $default_zone );  
     499 
     500    local %ENV; 
     501    if (defined $z and $z !~ "local") { $ENV{TZ} = $z; POSIX::tzset(); } 
     502    my $time = POSIX::mktime($s?$s:0,$m,$h,$D,$M-1,$Y-1900,0,0,0) or 
     503            die "Can't mktime from xmltvtime \"$xmltv\"."; 
     504    if (defined $z and $z !~ "local") { local %ENV; POSIX::tzset(); } 
     505 
     506    return ($time, $z); 
     507} 
     508 
     509# Move to a different timezone. 
     510#$timez[1] = ":localtime";          # Move to local time 
     511#$timez[1] = ":Australia/Sydney";   # Move to Australia/Sydney time 
     512#$timez[1] = ":UTC";                # Move to utc time 
     513#$timez[1] = "utc+0000";            # Move to utc time 
     514 
     515# Convert calendar time to yyyymmddhhmmss +hhmm format. 
     516# $time is in UTC and $z is its zone.  Changing $z moves to a new timezone. 
     517# eg. print timezxmltv(@timez); 
     518# eg. print timezxmltv($time);  # Defaults to localtime. 
     519sub timezxmltv { 
     520    my ($time, $z) = @_; 
     521 
     522    local %ENV; 
     523    if (defined $z and $z !~ "local") { $ENV{TZ} = $z; POSIX::tzset(); } 
     524        my $xmltv = POSIX::strftime("%Y%m%d%H%M%S %z", localtime($time)); 
     525    if (defined $z and $z !~ "local") { local %ENV; POSIX::tzset();  } 
     526 
     527    return $xmltv; 
     528} 
     529 
     530# Show it all works ok. 
     531sub testxmltvtimez { 
     532  print POSIX::strftime("%Y%m%d%H%M%S %z\t\t\tStart time\n\n", localtime()); 
     533 
     534  my $str = "200706022000"; 
     535  my @timez = xmltvtimez($str); 
     536  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\t\tOriginal time\n"; 
     537  @timez = xmltvtimez("$str", ":UTC"); 
     538  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\tOverride with utc\n"; 
     539  @timez = xmltvtimez("$str", ":Australia/Sydney"); 
     540  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\tOverride with Australia/Sydney\n\n"; 
     541 
     542  @timez = xmltvtimez($str); 
     543  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\t\tOriginal time\n"; 
     544  $timez[1] = ":UTC"; 
     545  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\tMove to utc time\n"; 
     546  $timez[1] = ":localtime"; 
     547  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\tMove to local time\n"; 
     548  $timez[1] = "utc+0000"; 
     549  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\t\tMove to utc time\n"; 
     550  $timez[1] = ":Australia/Sydney"; 
     551  print timezxmltv(@timez) . " " . ($timez[1] || "") . "\tMove to Australia/Sydney\n"; 
     552 
     553  print POSIX::strftime("\n%Y%m%d%H%M%S %z\t\t\tEnd time.\n", localtime()); 
     554} 
     555 
     556########################################################################## 
     557 
    4865581; 
  • status

    r723 r724  
    11application     shepherd            0.4.102 
    22reference       channel_list        2 
    3 reference       Shepherd/Common.pm  0.13 
     3reference       Shepherd/Common.pm  0.14 
    44reference       Shepherd/MythTV.pm  0.3 
    55grabber         yahoo7widget        1.85