DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy hh:mm aa zzz");
dateFormat.setTimeZone(TimeZone.getTimeZone("Pacific/Pitcairn"));
System.out.println(dateFormat.format(new Date(1243861200000L)));
Дополнительные комментарии: zzz распечатает PST, а z распечатает GMT-08: 00. TimeZone.getTimeZone ("EST") работает для восточного стандартного времени, заставляя меня думать, что это ошибка в TimeZone.getTimeZone ("PST").
Я предлагаю использовать заранее определенные часовые пояса, поскольку они могут сбивать с толку:
public static final TimeZone ZONE_GREENWICH_MEAN_TIME = TimeZone.getTimeZone("GMT");
public static final TimeZone ZONE_EASTERN_DAYLIGHT_TIME = TimeZone.getTimeZone("America/New_York"); // EDT, GMT-04:00
public static final TimeZone ZONE_EASTERN_STANDARD_TIME = TimeZone.getTimeZone("EST"); // GMT-05:00
public static final TimeZone ZONE_PACIFIC_DAYLIGHT_TIME = TimeZone.getTimeZone("America/Los_Angeles"); // PDT, GTM-0700
public static final TimeZone ZONE_PACIFIC_STANDARD_TIME = TimeZone.getTimeZone("Pacific/Pitcairn"); // PST, GMT-08:00
В другой раз я столкнулся с подобной проблемой "2009-11-01 08:44:44". Я попытался перебрать все идентификаторы, и ни один не напечатал EDT. Самое смешное, что "2010-11-01 08:44:44" будет печатать EDT. В период с 1990 по 2010 год только 2007, 2008 и 2010 годы будут печатать EDT. Когда я проверил годы от 0 до 2499, только у 431 был EDT, с первым в 1940 (это должно быть, когда EDT был введен). Таким образом, из 560 лет (1940-2499) только 431 имеют удостоверение личности, которое печатает EDT. С 1940 по 2006 год существует только 10 лет с удостоверениями личности, которые печатают EDT. После 2006 года, каждые 4, 5 или 10 лет, существует год, который не будет печатать EDT.