diff options
author | Christian Pointner <equinox@spreadspace.org> | 2015-07-24 19:58:39 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2015-07-24 19:58:39 (GMT) |
commit | 7ee36b6d571a0310224643547864b42433d311cd (patch) | |
tree | 8975dca3ae9cd5964343a499f2e93c520500d6fa | |
parent | 6e0e3a9c798ce1b21c939603484b0b08a4f0f23e (diff) |
added utils.pm with get_rd_week
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | META.yml | 4 | ||||
-rw-r--r-- | Makefile.PL | 10 | ||||
-rw-r--r-- | lib/RHRD.pm | 2 | ||||
-rwxr-xr-x | lib/RHRD/utils.pm | 56 |
5 files changed, 67 insertions, 6 deletions
@@ -1,6 +1,7 @@ ChangeLog lib/RHRD.pm lib/RHRD/rddb.pm +lib/RHRD/utils.pm Makefile.PL MANIFEST META.yml @@ -20,4 +20,6 @@ no_index: requires: Config::IniFiles: '0' DBI: '0' -version: '0.1' + DateTime: '0' + DateTime::TimeZone: '0' +version: '0.2' diff --git a/Makefile.PL b/Makefile.PL index c9f1b5e..cceb48c 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -2,13 +2,15 @@ use ExtUtils::MakeMaker; use 5.004; WriteMakefile( - NAME => 'RHRD', - VERSION_FROM => 'lib/RHRD.pm', + NAME => 'RHRD', + VERSION_FROM => 'lib/RHRD.pm', LICENSE => 'gpl_3', AUTHOR => 'Christian Pointner <equinox@helsinki.at>', ABSTRACT => 'Radio Helsinki Rivendell libraries and utils', PREREQ_PM => { - "Config::IniFiles" => 0, - "DBI" => 0 + "Config::IniFiles" => 0, + "DBI" => 0, + "DateTime" => 0, + "DateTime::TimeZone" => 0 }, ); diff --git a/lib/RHRD.pm b/lib/RHRD.pm index dce995f..859641f 100644 --- a/lib/RHRD.pm +++ b/lib/RHRD.pm @@ -26,6 +26,6 @@ use strict; use vars qw($VERSION); use 5.004; -$VERSION = "0.1" +$VERSION = "0.2" ########################################################################## diff --git a/lib/RHRD/utils.pm b/lib/RHRD/utils.pm new file mode 100755 index 0000000..3a49ebb --- /dev/null +++ b/lib/RHRD/utils.pm @@ -0,0 +1,56 @@ +# rddb.pm +# +# rhrdlibs +# +# Copyright (C) 2015 Christian Pointner <equinox@helsinki.at> +# +# This file is part of rhrdlibs. +# +# rhrdlibs is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# any later version. +# +# rhrdlibs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with rhrdlibs. If not, see <http://www.gnu.org/licenses/>. +# + +package RHRD::rddb; + +use strict; +use DateTime; +use DateTime::TimeZone; + +sub get_rd_week +{ + # + # This computes the current Rivendell Week based on the number + # of weeks since epoch. + # + # Explanation: + # epoch was at 01.01.1970 which was a Thursday. + # Monday in that week is (s-from-epoch + 3*24*60*60) seconds ago. + # This needs to be adjusted by the timezone offset for Europe/Vienna + # which is of course not constant (damn you daylight savings time) + # Divide this by (7*24*60*60) and you get the number of + # weeks since the Monday in the week of epoch adjusted for timezone offsets. + # This week had week number 3 so add an offset of 2 and + # get the modulo of 4. This rounded down gives you the current week + # with 0 meaning Week 1. So add 1 to that number and you will get + # the current RD week. + # + my $now = DateTime->now(); + my $tz = DateTime::TimeZone->new(name => 'Europe/Vienna'); + my $tz_offset = $tz->offset_for_datetime($now); + my $sEpoch = $now->epoch() + $tz_offset; + my $week = floor(((($sEpoch + 259200)/604800) + 2) % 4) + 1; + + return $week; +} + +return 1; |