Unverified Commit 304cf9bb authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

EFA may return invalid timestamps in CET → CEST nights

Deal with it.
parent a6e548c4
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -456,11 +456,14 @@ sub show_results {

		my @output_line;
		my $platform = $d->platform;
		my $dtime    = (
		my $dtime
		  = $d->datetime
		  ? (
			$relative_times
			? sprintf( '%2d min', $d->countdown )
			: $d->datetime->strftime('%H:%M')
		);
		  )
		  : q{??:??};

		if (
			   ( @grep_lines and none { $d->line eq $_ } @grep_lines )
+66 −31
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ sub new {
	my ( $sched_dt, $real_dt );

	if ( my $dt = $departure->{dateTime} ) {
		eval {
			$sched_dt = DateTime->new(
				year      => $dt->{year},
				month     => $dt->{month},
@@ -43,9 +44,16 @@ sub new {
				second    => $dt->{second} // 0,
				time_zone => 'Europe/Berlin',
			);
		};
		if ($@) {
			warn(
"Departure $departure->{servingLine}{stateless}: Invalid departure dateTIme: $@"
			);
		}
	}

	if ( my $dt = $departure->{realDateTime} ) {
		eval {
			$real_dt = DateTime->new(
				year      => $dt->{year},
				month     => $dt->{month},
@@ -55,6 +63,12 @@ sub new {
				second    => $dt->{second} // 0,
				time_zone => 'Europe/Berlin',
			);
		};
		if ($@) {
			warn(
"Departure $departure->{servingLine}{stateless}: Invalid departure dateTIme: $@"
			);
		}
	}

	my @hints
@@ -110,6 +124,20 @@ sub new {
	return $ref;
}

sub parse_datetime {
	my ( $self, $strp, $str ) = @_;

	my $ret;
	eval { $ret = $strp->parse_datetime($str); };
	if ($@) {
		my $strp_str = $strp->pattern;
		warn(
"Departure $self->{stateless}: Cannot parse '$str' with '$strp_str': $@"
		);
	}
	return $ret;
}

sub parse_route {
	my ( $self, $stop_seq, $requested_id ) = @_;
	my @ret;
@@ -132,20 +160,27 @@ sub parse_route {
		my $ref = $stop->{ref};
		my ( $arr, $dep );

		eval {
			if ( $ref->{arrDateTimeSec} ) {
			$arr = $self->{strp_stopseq_s}
			  ->parse_datetime( $ref->{arrDateTimeSec} );
				$arr = $self->parse_datetime( $self->{strp_stopseq_s},
					$ref->{arrDateTimeSec} );
			}
			elsif ( $ref->{arrDateTime} ) {
			$arr = $self->{strp_stopseq}->parse_datetime( $ref->{arrDateTime} );
				$arr = $self->parse_datetime( $self->{strp_stopseq},
					$ref->{arrDateTime} );
			}

			if ( $ref->{depDateTimeSec} ) {
			$dep = $self->{strp_stopseq_s}
			  ->parse_datetime( $ref->{depDateTimeSec} );
				$dep = $self->parse_datetime( $self->{strp_stopseq_s},
					$ref->{depDateTimeSec} );
			}
			elsif ( $ref->{depDateTime} ) {
			$dep = $self->{strp_stopseq}->parse_datetime( $ref->{depDateTime} );
				$dep = $self->parse_datetime( $self->{strp_stopseq},
					$ref->{depDateTime} );
			}
		};
		if ($@) {
			warn;
		}

		push(
+7 −1
Original line number Diff line number Diff line
@@ -144,7 +144,13 @@ sub parse_dt {
	my ( $self, $value ) = @_;

	if ($value) {
		my $dt = $self->{strptime_obj}->parse_datetime($value);
		my $dt;
		eval { $dt = $self->{strptime_obj}->parse_datetime($value); };
		if ($@) {
			my $strp_str = $self->{strptime_obj}->pattern;
			warn(
				"Trip $self->{id}: Cannot parse '$value' with '$strp_str': $@");
		}
		if ($dt) {
			return $dt->set_time_zone('Europe/Berlin');
		}