in reply to correctly reporting time?

First, from what I understand, calling gmtime should always give you GMT/UTC/Zulu time.

Second, locale isn't (AFAIK) the right module to use. Try setting $ENV{TZ} to your timezone and then calling localtime. (On some systems, you may need to throw a use POSIX; POSIX::tzset(); in between there.)