2011-02-02 32 views
6

Tôi cố gắng để tính toán sự khác biệt thời gian ngày nhưng tôi nhận được một số kết quả kỳ lạ: Dưới đây là nguồn:java ngày khác biệt câu đố

import java.util.Calendar; 
    import java.util.Collections; 
    import java.util.Vector; 

    public class Main { 

     static Calendar dcal = Calendar.getInstance(); 
    static Calendar ccal = Calendar.getInstance(); 
    public static void main(String[] args) { 
     dcal.set(2011, 1, 27); 
     ccal.set(2011,2,1); 
     long dtime = dcal.getTimeInMillis(); 
     long ctime = ccal.getTimeInMillis(); 
     long diff = ctime - dtime; 
     int hours = (int) (diff/(1000 * 60 * 60)); 
     System.out.println("hours->"+hours); 

    } 

} 

Khi tôi đặt ccal tới 1 31 2011 chênh lệch ngày là 96 giờ nhưng khi tôi đặt thành 2 1 2011 chênh lệch ngày là 48 giờ. Làm sao có thể? Phương thuốc là gì?

Cảm ơn,

Elliott

Trả lời

6

Nếu bạn đang thiết ccal như vậy "ccal.set(2011, 1, 31)" ngày thực sự là 03 tháng ba năm 2001, kể từ tháng là không dựa và cuộn lịch theo mặc định. Vì vậy, sự khác biệt của 48 giờ (96-48) là chính xác vì có hai ngày giữa ngày 1 tháng 3 (set(2011,2,1)) và ngày 3 tháng 3 (set(2011,1,31)).

+0

Cảm ơn bạn đã biết thông tin về lịch cuộn theo mặc định. –

4

Bạn biết rằng tháng 0 dựa, phải không? Vì vậy, 0 đại diện cho tháng 1 và 1 đại diện cho tháng 2, do đó, 1 31 2011 không tồn tại. Trên thực tế, tốt hơn hết là không nên sử dụng các số mà thay vào đó sử dụng hằng số Lịch cho các tháng, ví dụ: Calendar.JANUARY. Để xem cho chính mình những gì đang xảy ra, in ra ngày tương ứng của Lịch của bạn:

ccal.set(2011, 1, 31); 
    System.out.println(ccal.getTime()); 
+0

Tôi biết điều đó nhưng nó không giải thích kết quả – Elliott

+3

Tôi nghĩ rằng nó có. Kể từ ngày 31 tháng 1 năm 2011 không tồn tại, những điều bất ngờ xảy ra. Một lần nữa, in ra ngày như tôi đã đề cập trong chỉnh sửa câu trả lời của tôi. –

+1

Không, không bất ngờ. Hoàn toàn tài liệu tốt. – dty

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