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.
*/