У меня есть требование, когда мне нужно преобразовать часовой пояс из UTC в конкретный часовой пояс и наоборот, учитывая дневное свечение. Для этого я использую класс java.util.TimeZone
. Теперь проблема заключается в том, что существует несколько сотен идентификаторов для часового пояса, которые невозможно отобразить пользователю.Как получить идентификатор TimeZone для указанного кода страны ISO?
В настоящее время мы решили создать список стран и указать временные зоны для выбранной страны. Я не могу получить TimeZone
за ISO country code.
Вот код, который я в настоящее время использую для преобразования часовых поясов,
Timestamp convertedTime = null;
try{
System.out.println("timezone: "+timeZone +", timestamp: "+timeStamp);
Locale locale = Locale.ENGLISH;
TimeZone destTimeZone = TimeZone.getTimeZone(timeZone);// TimeZone.getDefault();
System.out.println("Source timezone: "+destTimeZone);
DateFormat formatter = DateFormat.getDateTimeInstance(
DateFormat.DEFAULT,
DateFormat.DEFAULT,
locale);
formatter.setTimeZone(destTimeZone);
Date date = new Date(timeStamp.getTime());
System.out.println(formatter.format(date));
convertedTime = new Timestamp(date.getTime());
/*long sixMonths = 150L * 24 * 3600 * 1000;
Date inSixMonths = new Date(timeStamp.getTime() + sixMonths);
System.out.println("After 6 months: "+formatter.format(inSixMonths));
Мне нужно узнать часовой пояс Id будет использоваться в коде выше для данной страны кода ISO.
Обновление: пробовал много вещей, и ниже код приводит меня к списку часовых поясов с 148 вводами (который по-прежнему большой). Может ли кто-нибудь помочь мне сократить его. Или, предложить какой-либо другой способ либо иметь список укоротить часовые пояса или получить часовые пояса для страны,
Код:
public class TimeZones {
private static final String TIMEZONE_ID_PREFIXES =
"^(Africa|America|Asia|Atlantic|Australia|Europe|Indian|Pacific)/.*";
private List<TimeZone> timeZones = null;
public List<TimeZone> getTimeZones() {
if (timeZones == null) {
initTimeZones();
}
return timeZones;
}
private void initTimeZones() {
timeZones = new ArrayList<TimeZone>();
final String[] timeZoneIds = TimeZone.getAvailableIDs();
for (final String id : timeZoneIds) {
if (id.matches(TIMEZONE_ID_PREFIXES)) {
timeZones.add(TimeZone.getTimeZone(id));
}
}
Collections.sort(timeZones, new Comparator<TimeZone>() {
public int compare(final TimeZone a, final TimeZone b) {
return a.getID().compareTo(b.getID());
}
});
}
+1. Гораздо лучше, чем мой (теперь удаленный) ответ –
:). Thnx JB Nizet – namalfernandolk
hI Namal, Спасибо за обмен ссылками, хорошую работу. Так держать. –