diff --git a/intl/icu/source/i18n/smpdtfmt.cpp b/intl/icu/source/i18n/smpdtfmt.cpp
--- a/intl/icu/source/i18n/smpdtfmt.cpp
+++ b/intl/icu/source/i18n/smpdtfmt.cpp
@@ -1523,18 +1523,19 @@ SimpleDateFormat::subFormat(UnicodeStrin
     }
 
     switch (patternCharIndex) {
 
     // for any "G" symbol, write out the appropriate era string
     // "GGGG" is wide era name, "GGGGG" is narrow era name, anything else is abbreviated name
     case UDAT_ERA_FIELD:
         {
-            if (typeid(cal) == typeid(ChineseCalendar) ||
-                typeid(cal) == typeid(DangiCalendar)) {
+            const char* type = cal.getType();
+            if (strcmp(type, "chinese") == 0 ||
+                strcmp(type, "dangi") == 0) {
                 zeroPaddingNumber(currentNumberFormat,appendTo, value, 1, 9); // as in ICU4J
             } else {
                 if (count == 5) {
                     _appendSymbol(appendTo, value, fSymbols->fNarrowEras, fSymbols->fNarrowErasCount);
                     capContextUsageType = DateFormatSymbols::kCapContextUsageEraNarrow;
                 } else if (count == 4) {
                     _appendSymbol(appendTo, value, fSymbols->fEraNames, fSymbols->fEraNamesCount);
                     capContextUsageType = DateFormatSymbols::kCapContextUsageEraWide;
