Календарь для определенного часового пояса не показывает летнее время в android и java

Я не могу получить точное время для определенного часового пояса, такого как «EST», который в целом соответствует GMT-5, но сейчас он следует за летним временем, который соответствует GMT-4. Но в java и android оба показывают разницу в 1 час (требуется только GMT-5, а не GMT-4). Но в точечной сети показывает правильно. Моя проблема такая же, как Как решить проблему перехода на летнее время с помощью часового пояса в java Но я могу использовать только краткую форму часового пояса, например ("EST", "IST"). Не могли бы вы дать какое-то предложение, чтобы получить точное время на основе определенного часового пояса краткой формы (например, "EST" ...)

Спасибо.


person sunriser    schedule 27.05.2012    source источник
comment
ИМО, ответ, на который вы ссылались, довольно ясен - то, чего вы пытаетесь достичь, просто невозможно.   -  person home    schedule 27.05.2012
comment
EST не переходит на летнее время. Восточное время - но это EST, которое становится EDT. S в EST является стандартным, т.е. без перехода на летнее время.   -  person Jon Skeet    schedule 27.05.2012
comment
Эти 3-4 буквенные сокращения не являются часовыми поясами реального времени, не стандартизированы и даже не уникальны (!). Попытка работать с ними приведет к боли и страданиям; избежать их. Работайте со значениями в UTC в целом и работайте с правильные названия часовых поясов в формате continent/region.   -  person Basil Bourque    schedule 15.07.2016


Ответы (1)


На этот вопрос нет однозначного ответа, поскольку у вас в основном неполная информация. Однако вот код для поиска всех поддерживаемых часовых поясов, в которых используется аббревиатура «EST» (не для дневного времени, в локали США):

import java.util.*; 

public class Test {
  public static void main(String[] args) {
    for (TimeZone zone : getMatchingTimeZones("EST")) {
      System.out.println(zone.getID());
    }
  }

  public static List<TimeZone> getMatchingTimeZones(String target) {
    List<TimeZone> list = new ArrayList<TimeZone>();
    for (String id : TimeZone.getAvailableIDs()) {
      TimeZone zone = TimeZone.getTimeZone(id);
      String actual = zone.getDisplayName(false, TimeZone.SHORT, Locale.US);
      if (actual.equals(target)) {
        list.add(zone);
      }
    }
    return list;
  }
}

Как вы попадете из этого списка в нужный часовой пояс, зависит от вас. (Также я не знаю, будет ли это работать на Android. Я не пробовал.)

person Jon Skeet    schedule 27.05.2012