2012-01-01 7 views
10

để có được ngày hiện tại và thời gianTại sao năm hiện tại trong ngày được lưu dưới dạng 3912?

final Calendar c = Calendar.getInstance(); 
mYear = c.get(Calendar.YEAR); 
mMonth = c.get(Calendar.MONTH); 
mDay = c.get(Calendar.DAY_OF_MONTH); 
mHour = c.get(Calendar.HOUR_OF_DAY); 
mMinute = c.get(Calendar.MINUTE); 

để tạo ra đối tượng ngày hiện tại

Date toDate; 
    toDate.setYear(mYear); 
    toDate.setMonth(mMonth); 
    toDate.setDate(mDay); 



Date endDate = toDate; 

khi in đối tượng ENDDATE tôi đã

Mon Jan 01 13:11:00 GMT+03:00 3912 

tại sao?

+0

y2.012K lỗi gây ra sự cố –

+0

là thời gian hệ thống của bạn thiết lập để năm có đúng không? – Andrew

Trả lời

18

Từ Date.setYear(int) mô tả: Đặt năm lịch gregorian từ năm 1900 cho đối tượng Ngày tháng. Do đó, 1900 + 2012 = 3912.

Nhưng calendar.get(Calendar.YEAR) trả về số chính xác năm 2012. Vì vậy, sự không nhất quán này của API gây ra vấn đề của bạn. Nhưng dù sao thì Date.setYear(int) không được chấp nhận, do đó, tốt hơn là sử dụng đối tượng Calendar để tính toán ngày.

+0

thì tôi phải làm gì? – Bader

+0

@AdhamEnaya Bạn có thể trừ '1900' từ số năm:' toDate.setYear (mYear - 1900) '. Nhưng tôi khuyên bạn nên sử dụng đối tượng 'Lịch' để tính toán ngày tháng. –

0

Tốt hơn để sử dụng Lịch

Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR,myear); 

(tức là)

cal.set(Calendar.YEAR,2016);