diff --git a/icu4c/source/i18n/simpletz.cpp b/icu4c/source/i18n/simpletz.cpp index 1bdf71b0f4d..3b8281dc83a 100644 --- a/icu4c/source/i18n/simpletz.cpp +++ b/icu4c/source/i18n/simpletz.cpp @@ -23,7 +23,7 @@ #include "simpletz.h" #include "gregocal.h" - +#include "tzdat.h" char SimpleTimeZone::fgClassID = 0; // Value is irrelevant @@ -107,6 +107,36 @@ SimpleTimeZone::SimpleTimeZone(int32_t rawOffset, const UnicodeString& ID, dstSavings, status); } +/** + * Construct from memory-mapped data. For private use by TimeZone. + */ +SimpleTimeZone::SimpleTimeZone(const StandardZone& stdZone, + const UnicodeString& id) { + UErrorCode status = U_ZERO_ERROR; + construct(stdZone.gmtOffset, id, + 0, 0, 0, 0, WALL_TIME, + 0, 0, 0, 0, WALL_TIME, + 0, status); +} + +/** + * Construct from memory-mapped data. For private use by TimeZone. + */ +SimpleTimeZone::SimpleTimeZone(const DSTZone& dstZone, + const UnicodeString& id) { + UErrorCode status = U_ZERO_ERROR; + construct(dstZone.gmtOffset, id, + dstZone.onsetRule.month, dstZone.onsetRule.dowim, + dstZone.onsetRule.dow, + dstZone.onsetRule.time * (int32_t)60000, + (TimeMode)dstZone.onsetRule.mode, + dstZone.ceaseRule.month, dstZone.ceaseRule.dowim, + dstZone.ceaseRule.dow, + dstZone.ceaseRule.time * (int32_t)60000, + (TimeMode)dstZone.ceaseRule.mode, + dstZone.dstSavings * (int32_t)60000, status); +} + /** * Internal construction method. */ diff --git a/icu4c/source/i18n/simpletz.h b/icu4c/source/i18n/simpletz.h index 6becd03aa4f..099a2d84105 100644 --- a/icu4c/source/i18n/simpletz.h +++ b/icu4c/source/i18n/simpletz.h @@ -25,6 +25,9 @@ #include "timezone.h" +struct StandardZone; +struct DSTZone; + /** * SimpleTimeZone is a concrete subclass of TimeZone * that represents a time zone for use with a Gregorian calendar. This @@ -475,6 +478,14 @@ private: DOW_LE_DOM_MODE }; + friend class TimeZone; // for access to these 2 constructors: + + /** + * Construct from memory-mapped data. + */ + SimpleTimeZone(const StandardZone& stdZone, const UnicodeString& id); + SimpleTimeZone(const DSTZone& dstZone, const UnicodeString& id); + /** * Internal construction method. */