2015-02-03 2 views
3

Я пытаюсь получить текущее время в другом часовом поясе. Я использовал этот код для этого:GregorianCalendar Class в Java

GregorianCalendar calender = new   
GregorianCalendar(TimeZone.getTimeZone("Asia/Bangkok")); 
    System.out.println(calender.getTime()); 

Но, когда я бегу этот код, этот код обеспечивает текущее время в СЕТ как раз в моей локальной машине находится в СЕТ. Я смущен. Тогда почему существует возможность предоставить TimeZone в конструкторе?

ответ

3

Ааа, радости в Java Date/Time API ...

То, что вы хотите (в стороне от лучшего API, таких как Joda время) является DateFormat. Он может печатать даты в указанном часовом поясе. Для этого вам не нужен Calendar.

dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Bangkok")); 
dateFormat.format(new Date()); 

Calendar для времени манипуляций и расчетов. Например, «установите время до 10 утра». Тогда ему нужен часовой пояс.

Когда вы закончите с этими расчетами, вы можете получить результат, вызвав calendar.getTime(), который возвращает Date.

A Date по существу является универсальной меткой времени (в миллисекундах с 1970 года, при отсутствии информации о часовом поясе или соответствующей). Если вы вызываете toString на Date, он просто напечатает что-то в вашем часовом поясе по умолчанию. Для большего контроля используйте DateFormat.

2

То, что вы делаете прямо сейчас:

  • Получение календаря в часовом поясе Бангкока
  • получить объект Date для этого времени (который находится в мсе, так как некоторых даты 1 январь 1970 , 00:00:00 GMT)
  • распечатывают этот день в вашем часовом поясе (Date.toString())

Вы должны использовать Formatter чтобы получить желаемый результат. например SimpleDateFormat

Альтернативным решением будет использование менее запутанной библиотеки даты и времени. например JodaTime или новый пакет java.time Java8

Смежные вопросы