If ucal_open() is called with a bogus time zone ID such as "Q8" or "XZA61" it still returns a non-NULL UCalendar* and leaves the UErrorCode status as U_ZERO_ERROR (it it was U_ZERO_ERROR on entry). The only consequence is that the offsets corresponding to UCAL_ZONE_OFFSET and UCAL_DST_OFFSET are 0 in this case. If it was just a problem with obviously bogus time zone IDs such as those mentioned above it might not be so bad, but the same is true for time zone IDs such as "ET" or "PDT" that are plausible but not in the enumeration returned by ucal_openTimeZones(); it seems to accept these, but the offsets end up as 0. If it does not understand the time zone ID, it should return an error.