Hãy xem xét các đoạn mã sau:vấn đề Strange với múi giờ, lịch và SimpleDateFormat
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());
Khi chạy đoạn mã này, tôi có kết quả như sau:
Start = Wed Sep 30 10:30:00 CEST 2009
End = Fri Oct 30 10:30:00 CET 2009
Tại sao tôi nhận múi giờ khác nhau?
Lưu ý rằng nếu tôi thiết lập ngày đầu tiên vào tháng tám và thứ hai trong tháng chín, đầu ra sẽ hiển thị cùng một múi giờ trong cả hai trường hợp:
long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();
sẽ hiển thị:
Start = Sun Aug 30 10:30:00 CEST 2009
End = Wed Sep 30 10:30:00 CEST 2009
tôi 'đang sử dụng Java 1.6.0_14
Là nó liên quan đến thời điểm chuyển đổi mùa đông cuối cùng của tháng mười? Nếu có, làm thế nào để thoát khỏi điều này? – romaintaz
Bạn không. Bạn có thể buộc 'CEST' thành' CET' nhưng điều đó sẽ dẫn đến một giờ khác (giờ tháng 10 sẽ là 11:30 thay vì 10:30). Nó giống như GMT (giờ, UTC bây giờ) và Luân Đôn thời gian: khi DST bật, Luân Đôn Thời gian là kỹ thuật GMT + 1, CET là GMT + 2 vv – laura
Chính xác bạn muốn đạt được điều gì? * Tại sao * làm yo nghĩ rằng bạn cần phải thoát khỏi DST? –