TimeZone* TimeZone::createCustomTimeZone(const UnicodeString& id) { int32_t sign, hour, min, sec; if (parseCustomID(id, sign, hour, min, sec)) { UnicodeString customID; formatCustomID(hour, min, sec, (sign < 0), customID); int32_t offset = sign * ((hour * 60 + min) * 60 + sec) * 1000; return new SimpleTimeZone(offset, customID); } return NULL; }
UnicodeString& TimeZone::getCustomID(const UnicodeString& id, UnicodeString& normalized, UErrorCode& status) { normalized.remove(); if (U_FAILURE(status)) { return normalized; } int32_t sign, hour, min, sec; if (parseCustomID(id, sign, hour, min, sec)) { formatCustomID(hour, min, sec, (sign < 0), normalized); } return normalized; }
TimeZone* ZoneMeta::createCustomTimeZone(int32_t offset) { UBool negative = FALSE; int32_t tmp = offset; if (offset < 0) { negative = TRUE; tmp = -offset; } uint8_t hour, min, sec; tmp /= 1000; sec = static_cast<uint8_t>(tmp % 60); tmp /= 60; min = static_cast<uint8_t>(tmp % 60); hour = static_cast<uint8_t>(tmp / 60); UnicodeString zid; formatCustomID(hour, min, sec, negative, zid); return new SimpleTimeZone(offset, zid); }