diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-06-25 22:32:56 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-06-25 22:32:56 +0200 |
commit | 93e3f31fdc00421bb2a639038464833ae6ba1366 (patch) | |
tree | 5bb1597f745a4411046521a44f0988ab63f57f3e | |
parent | 4a4f77bce87f89fdd43619582cb21d7805e30266 (diff) |
Specify latitude & longitude via commandline; use local time-zone
-rwxr-xr-x | bin/is_nighttime | 63 |
1 files changed, 46 insertions, 17 deletions
diff --git a/bin/is_nighttime b/bin/is_nighttime index a4da308..89e0762 100755 --- a/bin/is_nighttime +++ b/bin/is_nighttime @@ -11,29 +11,58 @@ use Getopt::Std; our $VERSION = '0.0'; +sub show_usage { + my ($exit_status) = @_; + + say "Usage: $0 [-d <offset>] [-ov] <latitude> <longitude>"; + exit( $exit_status // 0 ); +} + +sub get_rise_and_set { + my ( $ts, $lon, $lat ) = @_; + + my ( $rise_str, $set_str ) + = sunrise( $ts->year, $ts->month, $ts->day, $lon, $lat, + $ts->offset / 3600, 0 ); + + my ( $rise_h, $rise_m ) = ( $rise_str =~ m{(..):(..)} ); + my ( $set_h, $set_m ) = ( $set_str =~ m{(..):(..)} ); + + my $rise = $ts->clone->set( + hour => $rise_h, + minute => $rise_m, + ); + + my $set = $ts->clone->set( + hour => $set_h, + minute => $set_m, + ); + + return ( $rise, $set ); +} + my %opts; -getopts( 'd:ov', \%opts ); +getopts( 'd:hov', \%opts ); -my $now = DateTime->now( time_zone => 'Europe/Berlin' ); -my $delta = DateTime::Duration->new( minutes => $opts{d} || 0 ); +if ( $opts{h} ) { + show_usage(0); +} -my ( $rise_str, $set_str ) - = sunrise( $now->year, $now->month, $now->day, 6.47, 51.14, - $now->offset / 3600, - 0 ); +if ( @ARGV != 2 ) { + show_usage(1); +} + +my ( $latitude, $longitude ) = @ARGV; -my ( $rise_h, $rise_m ) = ( $rise_str =~ m{(..):(..)} ); -my ( $set_h, $set_m ) = ( $set_str =~ m{(..):(..)} ); +if ( $opts{d} and not $opts{d} =~ m{ ^ -? [[:digit:]]+ $}x ) { + say STDERR "Error: Offset (-d ...) must be a number\n"; + show_usage(1); +} -my $sunrise = $now->clone->set( - hour => $rise_h, - minute => $rise_m, -); +my $now = DateTime->now( time_zone => 'local' ); +my $delta = DateTime::Duration->new( minutes => $opts{d} || 0 ); -my $sunset = $now->clone->set( - hour => $set_h, - minute => $set_m, -); +my ( $sunrise, $sunset ) = get_rise_and_set( $now, $longitude, $latitude ); $sunrise->add_duration($delta); $sunset->subtract_duration($delta); |