2015-11-04 3 views
0
public static void main(String[] args) throws ParseException { 
    SimpleDateFormat dt = new SimpleDateFormat("MM dd yy"); 
    dt.setLenient(false); 
    dt.setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
    Date date = dt.parse("05 14 16"); 
    System.out.println(date); 
} 

Выход:Fri May 13 21:30:00 IST 2016SimpleDateFormat разобрать не чтит TIMEZONE

Если я пытаюсь использовать выход его переключение на один день, прежде чем вместо правильного дня.

Ожидается ли это или проблема с API?

+0

Не знаю, но вам также необходимо указать часовой пояс при печати. – Teepeemm

ответ

3

Ожидается, и на Java нет ошибки.

Класс Date не содержит информацию о часовом поясе. A java.util.Date - не более чем обертка для нескольких миллисекунд с 01-01-1970, 00:00:00 GMT. Он не помнит, что строка, которая была проанализирована из содержащейся информации о часовом поясе.

При отображении Date, например, (неявно) вызова toString() на нем, как вы делаете здесь:

System.out.println(date); 

он будет напечатан в часовом поясе, по умолчанию в системе, которая IST в вашем дело.

Если вы хотите распечатать его в определенный часовой пояс, отформатируйте его с помощью объекта SimpleDateFormat, установив желаемый часовой пояс на объект SimpleDateFormat. Например:

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z"); 
df..setTimeZone(TimeZone.getTimeZone("Asia/Hong_Kong")); 
System.out.println(df.format(date)); 
Смежные вопросы