я следующий код:Java TimeZone с DST
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
String currentDate = dateFormat.format(date);
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
System.out.println(sdf.format(getSomeDate(currentDate,TimeZone.getTimeZone("Asia/Omsk"))));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Date getSomeDate(final String str, final TimeZone tz) throws ParseException {
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
sdf.setTimeZone(tz);
return sdf.parse(str);
}
Теперь проблема с этим, если я использовать часовой пояс, я хочу (что «Америка/Чикаго»), я получаю совершенно неправильное время , Он делает текущее время +6 вместо -6.
Итак, как бы я мог это исправить, потому что теперь я должен установить часовой пояс из GMT + 6, чтобы получить правильное время & даты для моей программы.
Кроме того, Java автоматически включает настройки DST? Поскольку это используется людьми со всего мира, поэтому некоторые из них с разными временами DST, трудно поддерживать правильное время.
Почему бы не следовать этому ответу? [Java-хау к изменению-GMT-времени до локального времени] (http://stackoverflow.com/questions/10750279/java-how-to-change-gmt-time-to-local-time) – Serdalis
Да, Java обрабатывает DST. Фактически, класс TimeZone имеет несколько методов, связанных с DST. Все настройки DST также используются классом Calendar. – VGR
Вы не устанавливаете TZ на 'sdf', поэтому он форматирует дату, как в вашем местном TZ (по умолчанию TZ JVM). – Blake