in reply to Convert LST dates to LT dates
Close! Instead of using UTC and adding an hour (which could have been done much more simply using $dt->add( hours => 1 )), use +0100 as the time zone.
use DateTime qw( ); use DateTime::TimeZone qw( ); my $old_tz = DateTime::TimeZone->new( name => "+0100" ); my $new_tz = DateTime::TimeZone->new( name => "Europe/Rome" ); for my $date ( [ 2020, 12, 2, 1, 0 ], [ 2021, 7, 2, 1, 0 ], ) { my $dt = DateTime->new( year => => $date->[0], month => $date->[1], day => $date->[2], hour => $date->[3], minute => $date->[4], time_zone => $old_tz, ); say $dt->strftime("%FT%T%z"); $dt->set_time_zone($new_tz); say $dt->strftime("%FT%T%z"); }
Output:
2020-12-02T01:00:00+0100 ST 2020-12-02T01:00:00+0100 ST used in winter in Europe/Rome 2021-07-02T01:00:00+0100 ST 2021-07-02T02:00:00+0200 DT used in summer in Europe/Rome
You can use the strings +0100 and Europe/Rome directly; I simply used DT::TZ objects for efficiency.
|
|---|