Добрый день! Мне нужно сделать программу, которая по названию города определяет его часовой пояс, используя стандартные библиотеки java. Может кто-то подсказать способ получить все названия часовых поясов. Спасибо.
Используйте TimeZone
Этот код
TimeZone timeZone = TimeZone.getTimeZone("Asia/Singapore");
System.out.println(timeZone.getID());
System.out.println(timeZone.getRawOffset());
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(false, TimeZone.SHORT));
System.out.println(timeZone.getDisplayName(true, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(true, TimeZone.SHORT));
выдает
Asia/Singapore
28800000
Singapore Time
SGT
Singapore Summer Time
SGST
Также еще можно так
DateTimeZone tz = DateTimeZone.forID("America/Winnipeg");
DateTime dt = new DateTime(tz);
Но для этого тебе нужны спец Айдишки их перечень можешь найти Отсюда
Или использовать готовые APi
То что вы просите, а именно:
Мне нужно чтобы пользователь к примеру вводил город "Москва" и программа выбивала ему время в Москве, напишет Варшава - должна в Варшаве
в общем случае, это довольно сложная задача...
Есть такая БД называется tz - она же zoneinfo, несмотря на кажущуюся тривиальность БД имеет довольно сложную структуру учитывающую всякие разные хотелки политиков, границы стран, летнее время, законодательство, исторические аспекты и проч. лабуду. Приведенная @elik API ZoneInfo по сути надстройка над частью TZ. Эту же БД понужают практически все кому не лень.
Так вот проблема в том, что TZ содержит:
Each location in the database represents a national region where all clocks keeping local time have agreed since 1970. Locations are identified by continent or ocean and then by the name of the location, which is typically the largest city within the region.
То есть в БД приведены только крупные города, если пользователь задаст скажем Бердичев или Урюпинск (а он рано или поздно задаст такой вопрос) - то TZ вам не поможет. Но не все так печально, ибо тот же TZ содержит в себе точные границы временных зон, так что если сделать привязку к какой-нибудь ГИС, то более-менее легко можно понять в какой временной зоне будет находиться тот же Бердичев или Урюпинск. К счастью, умные люди это уже давно сделали и выложили в качестве веб сервиса.
Например GeoNames или Google Time Zone
Так что читайте доки, узнавайте удивительный мир веб сервисов, форматов JSON и проч. истории - я вам прямо завидую.
Вот вариант решения:
public String getTime(String id, String name){
TimeZone timezone;
if(id == null || id.length() == 0){
String[] ids = TimeZone.getAvailableIDs();
String finalID = "";
if(name != null) {
String buffer = name.replace(' ', '_');
for (String id : ids) {
if ( id.contains(buffer) ) {
finalID = id;
break;
}
}
}
//если не найдено, то выведет время GMT+0
timezone = TimeZone.getTimeZone(finalID);
}
else{
timezone = TimeZone.getTimeZone(id);
}
Calendar calendar = Calendar.getInstance(timezone);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss z");
formatter.setCalendar(calendar);
formatter.setTimeZone(timezone);
return formatter.format(calendar.getTime());
}
Если ввести город, которого нет в списке часовых поясов, то выведет время GMT+0. И учти, что название города надо вводить только на английском. Например, Нью Йорк
не найдет, а часовой пояс New York
будет найден.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
планируем доску обьявлений для не очень большего городас реализацией то справляемся хотя и мы начинающие
Хочу, чтобы при нажатии на jbutton "Test epta" открывалось 2-ое окноРеализовал вот так, но так не работает )) Подскажите, что не так делаю