| /* |
| ******************************************************************************* |
| * 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(); |
| } |
| |
| } |