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.)