blob: cfbd2db3026f6318ab06b589b3b841f758db3985 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl.javaspi.util;
import java.util.Locale;
import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.util.TimeZone;
public class TimeZoneNameProviderICU extends java.util.spi.TimeZoneNameProvider {
@Override
public String getDisplayName(String ID, boolean daylight, int style, Locale locale) {
TimeZone tz = TimeZone.getTimeZone(ID);
Locale actualLocale = ICULocaleServiceProvider.canonicalize(locale);
String disp = tz.getDisplayName(daylight, style, actualLocale);
if (disp.length() == 0) {
return null;
}
// This is ugly hack, but no simple solution to check if
// the localized name was picked up.
int numDigits = 0;
for (int i = 0; i < disp.length(); i++) {
char c = disp.charAt(i);
if (UCharacter.isDigit(c)) {
numDigits++;
}
}
// If there are more than 3 numbers, this code assume GMT format was used.
if (numDigits >= 3) {
return null;
}
if (daylight) {
// ICU uses standard name for daylight name when the zone does not use
// daylight saving time.
// This is yet another ugly hack to support the JDK's behavior
String stdDisp = tz.getDisplayName(false, style, actualLocale);
if (disp.equals(stdDisp)) {
return null;
}
}
return disp;
}
@Override
public Locale[] getAvailableLocales() {
return ICULocaleServiceProvider.getAvailableLocales();
}
}