Làm cách nào để tính số chênh lệch năm giữa 2 lịch trong Java?Làm cách nào để tính số chênh lệch năm giữa 2 ngày?
Trả lời
Trước tiên, bạn cần phải xác định cái nào cũ hơn cái kia. Sau đó, sử dụng vòng lặp while
trong đó bạn kiểm tra xem vòng lặp cũ có phải là after()
phiên bản mới hơn không. Gọi Calendar#add()
với một (1
) Calendar.YEAR
trên thẻ cũ hơn để thêm năm. Giữ một quầy để đếm số năm.
Kickoff dụ:
Calendar myBirthDate = Calendar.getInstance();
myBirthDate.clear();
myBirthDate.set(1978, 3 - 1, 26);
Calendar now = Calendar.getInstance();
Calendar clone = (Calendar) myBirthDate.clone(); // Otherwise changes are been reflected.
int years = -1;
while (!clone.after(now)) {
clone.add(Calendar.YEAR, 1);
years++;
}
System.out.println(years); // 32
Điều đó nói rằng, của Date
và Calendar
API trong Java SE thực sự thất bại hoành tráng. Có một API ngày mới trong việc lên kế hoạch cho Java 8 sắp tới, số JSR-310 tương tự như Joda-Time. Bây giờ bạn có thể muốn xem xét Joda-Time vì nó thực sự dễ dàng tính toán/sửa đổi ngày/giờ như thế này. Dưới đây là ví dụ sử dụng Joda-Time:
DateTime myBirthDate = new DateTime(1978, 3, 26, 0, 0, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
int years = period.getYears();
System.out.println(years); // 32
Rõ ràng hơn và súc tích hơn, phải không?
Hoặc bạn chỉ có thể sử dụng Calendar.getTimeInMillis()
:
long msYear = 1000L * 60 * 60 * 24 * 365;
long msDiff = c2.getTimeInMillis() - c1.getTimeInMillis();
System.out.println("Years diff: " + String.valueOf(msDiff/msYear));
Sửa này bỏ qua năm nhuận. Nhưng nếu bạn đang tìm kiếm một đại diện số nguyên của số năm những năm nhuận là không liên quan trong thời gian ngắn hơn nửa thiên niên kỷ hoặc lâu hơn.
Điều này là rất chính xác để tính tuổi của ai đó, ví dụ. Nhưng không đủ chính xác để nói sinh nhật của họ.
Nếu bạn cần sự khác biệt năm của bạn chính xác hơn ba chữ số có nghĩa trong vòng đời người (khoảng 80,00 năm so với 80,05), bạn nên sử dụng giải pháp "chính thức".
Nếu không, không có lý do cụ thể nào để nỗ lực thêm cho mức độ chính xác mà bạn sẽ không sử dụng.
Tài khoản này có cho năm nhuận, bước nhảy vọt, v.v. không? –
Không. Giả sử rằng nếu bạn đang tìm kiếm bội số của năm, bạn không quá lo ngại về một hoặc hai ngày không khớp. Nếu bạn tìm kiếm chiều dài chính xác của năm trong Wikipedia, bạn có thể nhận được nó gần như bạn muốn trong thời gian dài. –
@Nick: leap * minutes * ?? –
Calendar dobDate; // Set this to date to check
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int curDay = today.get(Calendar.DAY_OF_MONTH);
int year = dobDate.get(Calendar.YEAR);
int month = dobDate.get(Calendar.MONTH);
int day = dobDate.get(Calendar.DAY_OF_MONTH);
int age = curYear - year;
if (curMonth < month || (month == curMonth && curDay < day)) {
age--;
}
Điều này tránh lặp và phải chính xác trong ngày.
double diff = d2.getTime() - d1.getTime();
double d = 1000 * 60 * 60 * 24 * 365;
return (int) Math.round(diff/d);
(java.lang.Math)
Lưu ý: Hãy cẩn thận với những năm nhuận và những kỳ quặc lịch khác như vậy. – michaelb958
- 1. tính chênh lệch giữa hai ngày
- 2. Cách tính chênh lệch ngày trong perl
- 3. Lỗi chênh lệch ngày Javascript?
- 4. Cách nhận chênh lệch múi giờ (tính theo giờ) giữa 2 ngày
- 5. Làm thế nào để có được số ngày chênh lệch giữa hai ngày trên mysql?
- 6. chênh lệch ngày javascript
- 7. Tính số năm giữa 2 ngày trong PHP
- 8. Zend ngày - ngày chênh lệch
- 9. Cách tính chênh lệch theo giờ (thập phân) giữa hai ngày trong SQL Server?
- 10. Tính khoảng cách (chênh lệch) OpenCV
- 11. Nhận chênh lệch thời gian chính xác giữa hai NSDate?
- 12. Làm thế nào để tính toán chênh lệch thời gian trong vài phút giữa hai ngày trong iOS
- 13. Vấn đề PHP 5.3 lạ với sự khác biệt tính toán chênh lệch ngày trong ngày
- 14. Chênh lệch giữa tính toán ngày/giờ trong C# so với Delphi
- 15. Tính chênh lệch thời gian trong Cocoa
- 16. CMake: chênh lệch giữa $ {} và "$ {}"
- 17. Tính chênh lệch thời gian giữa hai hàng
- 18. phần chênh lệch giữa android.text.format.DateFormat và java.text.DateFormat
- 19. Chênh lệch giữa số loại điều khiển JDBC
- 20. Tính chênh lệch thời gian giữa hai lần javascript
- 21. PHP chênh lệch giữa \ r \ n \ n
- 22. Sự khác biệt về ngày (tính theo năm) bao gồm. phần năm
- 23. chênh lệch giữa PageLoad, onload & $ (document) .ready()
- 24. cách tính chênh lệch thời gian trong PHP
- 25. tính chênh lệch thời gian trong R
- 26. Tính số năm giữa các ngày trong Sql
- 27. parse.com chênh lệch giữa request.object và Request.Params
- 28. chênh lệch C++ giữa 0 và 0.0
- 29. chênh lệch giữa HasRequired và HasOptional
- 30. Cách tốt nhất để tính chênh lệch ngày tháng trong Javascript
hoặc .getYears Years.yearsBetween (myBirthDate, bây giờ)(); – mtpettyp
tôi không thể tạo đối tượng của thời kỳ. Nó có vẻ là tư nhân theo java.util.time ... bạn có thể giúp tôi ra xin vui lòng làm thế nào tôi có thể tìm thấy sự khác biệt của năm sử dụng Thời gian ?? –
@ Mr.Noddy: đoạn mã là JodaTime không phải là JavaTime. Trong JavaTime, sử dụng 'Period # between()'. Xem thêm javadoc https://docs.oracle.com/javase/8/docs/api/java/time/Period.html – BalusC