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.
You can compute the difference between
localtime($t)
andgmtime($t)
. Here is my version inspired by mob's answer:A portable way is to compare the output of
localtime
withgmtime
Someone pointing out that this is already implemented in a module somewhere in 5, 4, 3, ...
"I'd really like to not have any dependencies that I can't guarantee a user will have due to our wide install base"
How about including a custom copy of Date::Time (we'll call it My::Date::Time) in your installation? For example,
Time::Local
should do the trick