2011-10-31 30 views
6

Tại sao khi tôi cung cấp chuỗi ngày đầu vào với múi giờ GMT, SimpleDateFormat phân tích cú pháp và xuất ra múi giờ EET? Java SimpleDateFormat Múi giờ sai sau khi phân tích cú pháp

public static String DATE_FORMAT="dd MMM yyyy hh:mm:ss z"; 
public static String CURRENT_DATE_STRING ="31 October 2011 11:19:56 GMT"; 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); 
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
    System.out.println(simpleDateFormat.parseObject(CURRENT_DATE_STRING)); 

Và đầu ra là: Mon 31 tháng 10 13:19:56 EET 2011 hơn Mon 31 tháng 10 13:19:56 GMT 2011

Trả lời

10

Bạn đang in ra kết quả của Date.toString(). A Date không có bất kỳ khái niệm nào về múi giờ - nó chỉ là số mili giây kể từ thời đại Unix UTC. Date.toString()luôn luôn sử dụng múi giờ mặc định của hệ thống.

Lưu ý rằng bạn không nên mong đợi "Môn ngày 31 tháng 10 13:19:56 GMT 2011" cho rằng bạn đã đưa ra một thời gian mà quy định cụ thể một giờ GMT 11, không phải 13.

Nếu bạn muốn để sử dụng múi giờ cụ thể để in, bạn nên sử dụng DateFormat khác để in, thay vì sử dụng Date.toString(). (Date.toString() tiếp tục gây nhầm lẫn như thế này; nó thực sự không may.)

+0

Cảm ơn bạn đã trả lời nhanh. – IgorDiy

Các vấn đề liên quan