What's the best way to get the UTC offset in Perl?

formatting, perl, timestamp

Solution

`Time::Local` should do the trick

use Time::Local;
@t = localtime(time);
$gmt_offset_in_seconds = timegm(@t) - timelocal(@t);

Problem

I need to get the UTC offset of the current time zone in Perl in a cross platform (Windows and various flavors of Unix) way. It should meet this format: zzzzzz, which represents ±hh:mm in relation to UTC It looks like I should be able to get it via `strftime()`, but it doesn't appear to be consistent. Unix: ``` Input: perl -MPOSIX -e "print strftime(\"%z\", localtime());" Output: -0700 ``` Windows: ``` Input: perl -MPOSIX -e "print strftime(\"%z\", localtime());" Output: Mountain Standard Time ``` While it appears that Unix is giving me what I want (or at least something close), Windows is not. I'm pretty sure I can do it with `Date::Time` or similar, but I'd really like to not have any dependencies that I can't guarantee a user will have due to our wide install base. Am I missing something obvious here? Thanks in advance.

Original source