Takamoto has asked for the wisdom of the Perl Monks concerning the following question:

Hi

I am doing some timezone conversions, and I am realizing that this has some cavetas I am not understanding. In this particular case I am trying to convert from CET to Greenwitch. This is one hour difference, yet this script gives me two. It has probably to do with summer/wintertime? Which is the best approach to have precise conversions?

use DateTime; use DateTime::Format::Strptime; my $db_update_time = '2024-04-07 15:03:27'; my $parser = DateTime::Format::Strptime->new( pattern => '%Y-%m-%d %T', locale => 'en_US', time_zone => 'Europe/Berlin', on_error => 'croak', ); my $datetime = $parser->parse_datetime($db_update_time); $datetime->set_time_zone('Greenwich'); $formatted_time = $datetime->strftime('%Y-%m-%d %T'); print $formatted_time; #output: 2024-04-07 13:03:27

Replies are listed 'Best First'.
Re: converting time zone CET Greenwitch (summertime)
by LanX (Saint) on Apr 07, 2024 at 13:42 UTC
    Probably not the cause, but I'm noticing some typos concerning Greenwi(t)ch

    Edit

    You are asking for the current time in Berlin - which is summer time CEST- and are comparing it to winter time GMT in London.

    Both Berlin (CET -> CEST) and London (GMT -> BST) switched to daylight saving time last weekend and are now again 1 h apart.

    But Greenwich Mean Time aka GMT (UTC+0) is British time in winter, which is 1h apart from Central European (winter) Time CET.

    I hope it's clear now, that you never got CET in the first place, but CEST.

    2 weeks ago your code would have seemingly "worked".

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

Re: converting time zone CET Greenwitch
by Takamoto (Monk) on Apr 07, 2024 at 13:34 UTC

    I am probably confusing Greenwich timezone with Europe/London timezone (Greenwich is in London), since I get correctly 1 hr difference by using $datetime->set_time_zone('Europe/London'); instead of Greenwich.

      Yes, you are correct. London local time is BST (GMT + 1) between the last Sunday in March and the last Sunday in October. The rest of the year it is GMT.


      🦛