/usr/bin/tv_augment_tz is in xmltv-util 0.5.69-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #!/usr/bin/perl
=pod
=head1 NAME
tv_augment_tz - Convert floating time to explicit time.
=head1 SYNOPSIS
tv_augment_tz [--help] [--output FILE] [--tz TIMEZONE] [FILE...]
=head1 DESCRIPTION
Read XMLTV data and augment all times with the correct offset. Times that are
already explicit will be converted to TIMEZONE as well.
B<--output FILE> write to FILE rather than standard output
B<--tz TIMEZONE> use TIMEZONE (e.g. Europe/Berlin) rather then the default of UTC
=head1 SEE ALSO
L<xmltv(5)>.
=head1 AUTHOR
Karl Dietz, <dekarl@spaetfruehstuecken.org>
=head1 BUGS
Guessing the right time when local time is abigous doesn't work properly.
=cut
use strict;
use warnings;
use XMLTV::Version '$Id: tv_augment_tz,v 1.1 2012/06/13 06:45:08 dekarl Exp $';
use Encode; # used to convert 'perl strings' into 'utf-8 strings'
use DateTime;
use Getopt::Long;
use XML::LibXML;
use XMLTV;
use XMLTV::Usage <<END
$0: Convert floating local time to explicit local time.
usage: $0 [--help] [--output FILE] [--tz TIMEZONE] [FILE...]
END
;
my ($opt_help, $opt_output, $opt_tz);
GetOptions('help' => \$opt_help,
'output=s' => \$opt_output,
'tz=s' => \$opt_tz
)
or usage(0);
usage(1) if $opt_help;
@ARGV = ('-') if not @ARGV;
if (!defined ($opt_tz)) {
$opt_tz = 'UTC';
}
sub parse_date ( $ ) {
my $raw = shift;
my ($datetime, $tz) = split (/\s/, $raw);
my ($year, $month, $day, $hour, $minute, $second) = (0, 0, 0, 0, 0, 0);
if (length ($datetime) == 4+2+2+2+2+2) {
($year, $month, $day, $hour, $minute, $second) = ($datetime =~ m|(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)|);
} elsif (length ($datetime) == 4+2+2+2+2) {
($year, $month, $day, $hour, $minute) = ($datetime =~ m|(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)|);
} elsif (length ($datetime) == 4+2+2+2) {
($year, $month, $day, $hour, $minute) = ($datetime =~ m|(\d\d\d\d)(\d\d)(\d\d)(\d\d)|);
} elsif (length ($datetime) == 4+2+2) {
($year, $month, $day, $hour, $minute) = ($datetime =~ m|(\d\d\d\d)(\d\d)(\d\d)|);
} elsif (length ($datetime) == 4+2) {
($year, $month, $day, $hour, $minute) = ($datetime =~ m|(\d\d\d\d)(\d\d)|);
} elsif (length ($datetime) == 4) {
($year, $month, $day, $hour, $minute) = ($datetime =~ m|(\d\d\d\d)|);
}
my $dt = DateTime->new (
year => $year,
month => $month,
day => $day,
hour => $hour,
minute => $minute,
second => $second
);
if ($tz) {
$dt->set_time_zone ($tz);
}
return $dt;
}
# load XML
if ($ARGV[0]) {
open *STDIN, '<', $ARGV[0];
}
binmode *STDIN; # drop all PerlIO layers possibly created by a use open pragma
my $doc = XML::LibXML->load_xml(IO => *STDIN);
my $starttimes = $doc->findnodes ('/tv/programme[@start]');
foreach my $node ($starttimes->get_nodelist ()) {
my $time = $node->getAttribute ('start');
$time = parse_date ($time)->set_time_zone ($opt_tz)->strftime ('%Y%m%d%H%M%S %z');
$node->setAttribute('start', $time);
}
my $stoptimes = $doc->findnodes ('/tv/programme[@stop]');
foreach my $node ($stoptimes->get_nodelist ()) {
my $time = $node->getAttribute ('stop');
$time = parse_date ($time)->set_time_zone ($opt_tz)->strftime ('%Y%m%d%H%M%S %z');
$node->setAttribute('stop', $time);
}
# save modified XML
if ($opt_output) {
open *STDOUT, '>', $opt_output;
}
binmode *STDOUT; # as above
$doc->toFH(*STDOUT);
|