use Time::TZOffset if available