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

Convert non-local timestamps to local time zone

parent e6480f63
Loading
Loading
Loading
Loading
+24 −14
Original line number Diff line number Diff line
@@ -62,20 +62,30 @@ sub new {
	);

	# dProgType/aProgType: CORRECTED oder PROGNOSED
	my $sched_dep = $connection->{dep}{dTimeS};
	my $rt_dep    = $connection->{dep}{dTimeR};
	my $sched_arr = $connection->{arr}{aTimeS};
	my $rt_arr    = $connection->{arr}{aTimeR};

	for my $ts ( $sched_dep, $rt_dep, $sched_arr, $rt_arr ) {
		if ($ts) {
			$ts = handle_day_change(
	my $sched_dep = handle_day_change(
		date     => $date,
				time     => $ts,
		time     => $connection->{dep}{dTimeS},
		offset   => $connection->{dep}{dTZOffset},
		strp_obj => $strptime,
	);
	my $rt_dep = handle_day_change(
		date     => $date,
		time     => $connection->{dep}{dTimeR},
		offset   => $connection->{dep}{dTZOffset},
		strp_obj => $strptime,
	);
	my $sched_arr = handle_day_change(
		date     => $date,
		time     => $connection->{arr}{aTimeS},
		offset   => $connection->{arr}{aTZOffset},
		strp_obj => $strptime,
	);
	my $rt_arr = handle_day_change(
		date     => $date,
		time     => $connection->{arr}{aTimeR},
		offset   => $connection->{arr}{aTZOffset},
		strp_obj => $strptime,
	);
		}
	}

	my @sections;
	for my $sec (@secL) {
+24 −14
Original line number Diff line number Diff line
@@ -58,20 +58,30 @@ sub new {
		time_zone => 'Europe/Berlin'
	);

	my $sched_dep = $sec->{dep}{dTimeS};
	my $rt_dep    = $sec->{dep}{dTimeR};
	my $sched_arr = $sec->{arr}{aTimeS};
	my $rt_arr    = $sec->{arr}{aTimeR};

	for my $ts ( $sched_dep, $rt_dep, $sched_arr, $rt_arr ) {
		if ($ts) {
			$ts = handle_day_change(
	my $sched_dep = handle_day_change(
		date     => $date,
				time     => $ts,
		time     => $sec->{dep}{dTimeS},
		offset   => $sec->{dep}{dTZOffset},
		strp_obj => $strptime,
	);
	my $rt_dep = handle_day_change(
		date     => $date,
		time     => $sec->{dep}{dTimeR},
		offset   => $sec->{dep}{dTZOffset},
		strp_obj => $strptime,
	);
	my $sched_arr = handle_day_change(
		date     => $date,
		time     => $sec->{arr}{aTimeS},
		offset   => $sec->{arr}{aTZOffset},
		strp_obj => $strptime,
	);
	my $rt_arr = handle_day_change(
		date     => $date,
		time     => $sec->{arr}{aTimeR},
		offset   => $sec->{arr}{aTZOffset},
		strp_obj => $strptime,
	);
		}
	}

	my $tco = {};
	for my $tco_id ( @{ $sec->{jny}{dTrnCmpSX}{tcocX} // [] } ) {
+10 −0
Original line number Diff line number Diff line
@@ -13,8 +13,13 @@ sub handle_day_change {
	my (%opt)       = @_;
	my $datestr     = $opt{date};
	my $timestr     = $opt{time};
	my $tz_offset   = $opt{offset};
	my $offset_days = 0;

	if ( not defined $timestr ) {
		return;
	}

	# timestr may include a day offset, resulting in DDHHMMSS
	if ( length($timestr) == 8 ) {
		$offset_days = substr( $timestr, 0, 2, q{} );
@@ -26,6 +31,11 @@ sub handle_day_change {
		$ts->add( days => $offset_days );
	}

	if ( defined $tz_offset and $tz_offset != $ts->offset / 60 ) {
		my $ts_offset = $tz_offset - $ts->offset / 60;
		$ts->subtract( minutes => $ts_offset );
	}

	return $ts;
}