Давайте рассмотрим следующий код:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();
Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println(" End = " + c.getTime());
При выполнении этого фрагмента кода у меня есть следующий вывод:
Start = Wed Sep 30 10:30:00 CEST 2009
End = Fri Oct 30 10:30:00 CET 2009
Почему я получаю другой часовой пояс?
Обратите внимание, что, если я установил первое свидание в августе и второе в сентябре, вывод отобразит тот же часовой пояс в обоих случаях:
long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();
отобразится:
Start = Sun Aug 30 10:30:00 CEST 2009
End = Wed Sep 30 10:30:00 CEST 2009
Я использую Java 1.6.0_14
Cest
- это центральноевропейское летнее время. Это то же самое, что и CET
, в действии летнего света в силу.
Да, это связано с летним светом. Если вы используете часовой пояс, который распознает DST, он будет автоматически использоваться. Вы можете использовать GMT, например, если вы этого не хотите.
Вы можете установить часовой пояс по умолчанию
import java.util.TimeZone;
...
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // or "Etc/GMT-1"
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();
Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println(" End = " + c.getTime());
Использование Timezone.GetavailuleDiDs ()
, чтобы увидеть все доступные идентификаторы Отказ
Редактировать : Вы также можете использовать новый SimpleTimeZone
TimeZone.setDefault(new SimpleTimeZone(60 * 60 * 1000, "CET"));