in reply to Check if Date interval contains Hour X
use strict; use warnings; use DateTime qw( ); use DateTime::Format::Strptime qw( ); # Returns true if range ($dt_s, $dt_e) # spans any part of any of the @hours. sub hour_in_range { my ($dt_s, $dt_e, @hours) = @_; # Find the floor. ( $dt_s = $dt_s->clone() ) ->truncate( to => 'hour' ); for my $hour (@hours) { ( my $dt = $dt_s->clone() ) ->set_hour($hour); $dt->add( days => 1 ) if $dt < $dt_s; return 1 if $dt <= $dt_e; } return 0; } { my @hours = (1, 11); # Hours to check my $parser = new DateTime::Format::Strptime( pattern => '%Y-%m-%d %H:%M:%S', time_zone => 'local', ); <DATA>; # Skip first line while (<DATA>) { chomp; my ($ts_s, $ts_e, $text) = split /\|/; my $dt_s = $parser->parse_datetime( $ts_s ); my $dt_e = $parser->parse_datetime( $ts_e ); if (hour_in_range($dt_s, $dt_e, @hours)) { print "Match\n"; } else { print "Not Match\n"; } } } __DATA__ Start_Time |End Time |TEXT 2009-07-22 08:00:00|2009-07-22 08:00:00|blablalblabla 2009-07-22 01:00:00|2009-07-22 01:00:00|blablalblabla 2009-07-22 08:00:00|2009-07-22 21:00:00|blablalblabla 2009-07-22 23:00:00|2009-07-23 00:00:00|blablalblabla 2009-07-22 23:00:00|2009-07-23 02:00:00|blablalblabla
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Check if Date interval contains Hour X
by alexm (Chaplain) on Jul 23, 2009 at 21:40 UTC | |
by ikegami (Patriarch) on Jul 23, 2009 at 21:50 UTC | |
by alexm (Chaplain) on Jul 23, 2009 at 22:41 UTC |