2013-09-17 2 views
0

Есть ли способ конвертировать человеко-читаемую строку часового пояса, например Eastern Standard Time, в идентификатор часового пояса без жесткого кодирования?Получить идентификатор часового пояса из строки, читаемой человеком, с часовым поясом

Если я получу идентификатор часового пояса, тогда я смогу установить часовой пояс соответственно.

ответ

2

Вы можете использовать класс TimeZone для перечисления идентификаторов и строк часового пояса. Вы также можете установить TimeZone из строкового значения.

Класс TimeZone и класс Locale могут использоваться для поиска соответствующего имени часового пояса в текущем или некотором назначенном часовом поясе. Например, этот фрагмент кода

final Locale fr_FR = Locale.FRANCE; 
final Locale de_DE = Locale.GERMANY; 
for (String s : TimeZone.getAvailableIDs()) { 
    final TimeZone tz = TimeZone.getTimeZone(s); 
    sb.append(tz.getDisplayName() + "<br>"); 
    sb.append(tz.getDisplayName(fr_FR) + "<br>"); 
    sb.append(tz.getDisplayName(de_DE) + "<br>"); 
    sb.append("<br>"); 
} 

перечисляет следующие имена для некоторых европейских часовых поясов:

Eastern European Standard Time 
heure normale de l’Europe de l’Est 
Osteuropäische Normalzeit 

Western European Standard Time 
heure normale d’Europe de l’Ouest 
Westeuropäische Normalzeit 

Central European Standard Time 
heure normale de l’Europe centrale 
Mitteleuropäische Normalzeit 
+0

Спасибо, что его работа для меня. – dipali

0

Вы должны использовать идентификатор, чтобы начать с, например America/New_York.

Проблема заключается в том, что как «Восточное стандартное время», так и «Восточное дневное время» будут и на один и тот же идентификатор.

Кроме того, это английские формы отображаемых имен. Пользователь во Франции может использовать зону Europe/Paris, и на английском языке мы будем использовать отображаемое имя «Центральноевропейское стандартное время» или «Центральное европейское летнее время». Но по-французски они будут использовать отображаемое имя «стандартная норма европейского центра» или «центральная Европа Европы». У этих Unicode CLDR есть эти переводы. Я не уверен, насколько Android их использует.

Кроме того, когда вы говорите что-то вроде «Центральное стандартное время» - это не обязательно уникально. Возможно, вы говорите о America/Chicago, или вы, возможно, говорите о America/Costa_Rica. Черт возьми, вы можете говорить о Australia/Adelaide, хотя некоторые могут назвать это «австралийским центральным стандартным временем», но это примерно то же самое, что назвать наше «американское центральное стандартное время».

Итак ... Покажите отображаемое имя, но сохраните идентификатор. Удерживайте идентификатор и используйте его - не пытайтесь угадать его из отображаемого имени.

Смежные вопросы