| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html#License |
| /* |
| ******************************************************************************* |
| * Copyright (C) 2008-2012, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.impl.javaspi.util; |
| |
| import java.util.Locale; |
| import java.util.TimeZone; |
| |
| import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider; |
| import com.ibm.icu.text.TimeZoneNames; |
| import com.ibm.icu.text.TimeZoneNames.NameType; |
| |
| public class TimeZoneNameProviderICU extends java.util.spi.TimeZoneNameProvider { |
| |
| @Override |
| public String getDisplayName(String ID, boolean daylight, int style, Locale locale) { |
| String dispName = null; |
| boolean[] isSystemID = new boolean[1]; |
| String canonicalID = com.ibm.icu.util.TimeZone.getCanonicalID(ID, isSystemID); |
| if (isSystemID[0]) { |
| long date = System.currentTimeMillis(); |
| TimeZoneNames tznames = TimeZoneNames.getInstance(ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale)); |
| |
| { |
| // Workaround for Java bug. Java needs all 4 names available at the same time. |
| // 2012-10-09 yoshito |
| String lstd = tznames.getDisplayName(canonicalID, NameType.LONG_STANDARD, date); |
| String ldst = tznames.getDisplayName(canonicalID, NameType.LONG_DAYLIGHT, date); |
| String sstd = tznames.getDisplayName(canonicalID, NameType.SHORT_STANDARD, date); |
| String sdst = tznames.getDisplayName(canonicalID, NameType.SHORT_DAYLIGHT, date); |
| |
| if (lstd != null && ldst != null && sstd != null && sdst != null) { |
| switch (style) { |
| case TimeZone.LONG: |
| dispName = daylight ? ldst : lstd; |
| break; |
| case TimeZone.SHORT: |
| dispName = daylight ? sdst : sstd; |
| break; |
| } |
| } |
| } |
| |
| // { |
| // switch (style) { |
| // case TimeZone.LONG: |
| // dispName = daylight ? |
| // tznames.getDisplayName(canonicalID, NameType.LONG_DAYLIGHT, date) : |
| // tznames.getDisplayName(canonicalID, NameType.LONG_STANDARD, date); |
| // break; |
| // case TimeZone.SHORT: |
| // dispName = daylight ? |
| // tznames.getDisplayName(canonicalID, NameType.SHORT_DAYLIGHT, date) : |
| // tznames.getDisplayName(canonicalID, NameType.SHORT_STANDARD, date); |
| // break; |
| // } |
| // } |
| } |
| return dispName; |
| } |
| |
| @Override |
| public Locale[] getAvailableLocales() { |
| return ICULocaleServiceProvider.getAvailableLocales(); |
| } |
| |
| } |