summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2018-06-25 22:32:56 +0200
committerDaniel Friesel <derf@finalrewind.org>2018-06-25 22:32:56 +0200
commit93e3f31fdc00421bb2a639038464833ae6ba1366 (patch)
tree5bb1597f745a4411046521a44f0988ab63f57f3e
parent4a4f77bce87f89fdd43619582cb21d7805e30266 (diff)
Specify latitude & longitude via commandline; use local time-zone
-rwxr-xr-xbin/is_nighttime63
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);