日の出と日没時間を計算するモジュールは、Astro::SunriseとDateTime::Event::Sunriseの2つがあるのだが、両方とも、DateTimeを必要とする。
某仕事で使おうと思ってDateTimeをインストールしようとしていたのだが、依存関係が結構あり、面倒。
んで、改造に楽そうなAstro::SunriseからDateTimeを取り除いてみた。
以下Patch
--- AstroSunrise.pm.orig Mon Feb 7 23:13:58 2005
+++ AstroSunrise.pm Mon Feb 7 22:54:08 2005
@@ -1,4 +1,4 @@
-package Astro::Sunrise;
+package AstroSunrise;
=head1 NAME
@@ -83,7 +83,9 @@
use POSIX qw(floor);
use Math::Trig;
use Carp;
-use DateTime;
+#use DateTime;
+use Time::Piece;
+use Time::Seconds;
use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $RADEG $DEGRAD );
require Exporter;
@@ -614,12 +616,14 @@
my $alt = shift || -0.833;
my $offset = int( shift || 0 );
- my $today = DateTime->today->set_time_zone( 'local' );
- $today->add( days => $offset );
-
+ #my $today = DateTime->today->set_time_zone( 'local' );
+ #$today->add( days => $offset );
+ my $today = Time::Piece->new;
+ $today += ONE_DAY * $offset;
+
my( $sun_rise, undef ) = sunrise( $today->year, $today->mon, $today->mday,
$longitude, $latitude,
- ( $today->offset / 3600 ),
+ ( $today->tzoffset / 3600 ),
#
# DST is always 0 because DateTime
# currently (v 0.16) adds one to the
@@ -666,12 +670,14 @@
my $alt = shift || -0.833;
my $offset = int( shift || 0 );
- my $today = DateTime->today->set_time_zone( 'local' );
- $today->add( days => $offset );
+ #my $today = DateTime->today->set_time_zone( 'local' );
+ #$today->add( days => $offset );
+ my $today = Time::Piece->new;
+ $today += ONE_DAY * $offset;
my( undef, $sun_set ) = sunrise( $today->year, $today->mon, $today->mday,
$longitude, $latitude,
- ( $today->offset / 3600 ),
+ ( $today->tzoffset / 3600 ),
#
# DST is always 0 because DateTime
# currently (v 0.16) adds one to the
Astro::SunriseをAstroSunriseというモジュール名に変えてしまいます。あとはライブラリパスが通った場所において、
use AstroSunrise;
あまり確かめていないが、Googleでみつけた日の出・日の入時刻計算のページなどと比べるとすこしズレがある。
まぁ、厳密に時間を調べないといけない訳ではないのでこれでよし。