in reply to Re: Time::Piece reversibility
in thread Time::Piece reversibility
That's very helpful, @cguevara, thank you.
So to summarize that result, Time::Piece->strptime always returns a gmtime instance (tzoffset = 0). If you want it in localtime, you need to convert that to a localtime instance. Correct?
My follow-up question, then, is how to achieve that same result if the time zone is not part of the date string? IOW, I want to parse "2017-06-19 10:07:42" into a localtime Time::Piece instance with epoch seconds of 1497892062 and a tzoffset of -25200.
I can use Time::Local and do this:
$ENV{'TZ'} = 'America/Los_Angeles'; my $epoch = timelocal(42,07,10,19,05,2017); print "timelocal epoch: $epoch\n"; print "timelocal date: ", scalar localtime($epoch), "\n";
Produces:
timelocal epoch: 1497892062 timelocal date: Mon Jun 19 10:07:42 2017
But since strptime() always returns gmtime, is there a way to do that with Time::Piece currently? It will be treated as UTC and converting it to a localtime() will offset it by 7 hours (in this case).
#!/usr/bin/env perl use strict; use warnings; use Time::Local; use Time::Piece; $ENV{'TZ'} = 'America/Los_Angeles'; my $datestr = '2017-06-19 10:07:42'; my $gmt = Time::Piece->strptime($datestr, '%Y-%m-%d %H:%M:%S'); my $local = localtime($gmt->epoch); print "gmt epoch: ", $gmt->epoch, "\n", "local epoch: ", $local->epoch, "\n", "datestr: $datestr\n", "T::P gmt strftime: ", $gmt->strftime, "\n", "T::P local strftime: ", $local->strftime, "\n" ;
Produces
gmt epoch: 1497866862 local epoch: 1497866862 datestr: 2017-06-19 10:07:42 T::P gmt strftime: Mon, 19 Jun 2017 10:07:42 UTC T::P local strftime: Mon, 19 Jun 2017 03:07:42 PDT
Of course you could always append the zone that you want to the date string, but that's cheating ;)
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: Time::Piece reversibility
by cguevara (Vicar) on Jun 18, 2017 at 20:19 UTC | |
by mla12 (Acolyte) on Jun 18, 2017 at 20:52 UTC | |
by cguevara (Vicar) on Jun 19, 2017 at 21:45 UTC |