30/09/2018, 20:18
[Thảo luận C++]Tính khoảng thời gian giữa 2 thời điểm ngày / tháng / năm
Như tiều đề mình đang có gặp bài toán như vậy , mình có nghĩ tới
- tính khoảng thời gian từ thời điểm t1 -> cuối năm đó
- tính khoảng thời gian từ thời điểm t2 -> đầu năm đó
(cả 2 đều theo đơn vị ngày)
rồi tính tiếp năm của t1 -> t2 là bao nhiêu năm rồi quy ra khoảng thời gian bằng cách cộng lại với nhau
Nhưng mình nghĩ cách này hơi dài cộng phức tạp.
Bạn nào có cách tối ưu hơn có thể giúp mình không ? Cảm ơn
Bài liên quan
Bạn có thể quy tất cả về đơn vị nhỏ nhất rồi trừ. Sau đó chuyển ngược lại. Cách này đơn giản và không sợ bị nhầm lẫn
ko phức tạp đâu, cách vậy là đơn giản rồi đó.
với lại phải giới hạn số năm, hình như trước ngày X tháng Y năm 1582 hay 1600 gì đó thì lịch là 4 năm nhuận 1 lần (365.25 ngày trong 1 năm), sau đó thì người ta phát hiện ra 1 năm có 365.2425 ngày nên sửa thành năm nhuận là năm chia hết cho 400 (tức là +0.0025 ngày/năm) hoặc là năm chia hết cho 4 (+0.25) nhưng ko chia hết cho 100 (-0.01)
Bạn có thể đếm từng ngày một, ví dụ
Vì 10^6 ngày ~ 2700 năm nên đến thời điển hiện tại thì cách này vẫn dùng được, lại ko bị nhầm nữa Tùy bạn đánh đổi một cách phức tạp code chạy nhanh O(1), với một cách dễ code, chạy chấp nhận được O(số ngày)
Có một cách thần thánh như sau:
int numberOfDays = thisIsMagic(2016, 4, 6) - thisIsMagic(2010, 3, 4);
thế nào cách này cũng có liên quan tới Gauss
Đại ca cho em hỏi mốc thời gian của hàm trên là năm nào ạ! Làm sao ra được công thức trên hay vậy ạ?? ngưỡng mộ <3 <3 <3. với lại công thức trên đúng với khoảng thời gian từ năm nào đến năm nào ợ?
cái này thì hình như anh ấy tính mốc từ năm 0 bạn ạ
Bác giải thích cho em thuật toán này được không ạ. em hiểu mỗi chỗ
365*year + year/4 - year/100 + year/400
Bạn vào đây có giải thích nhé
http://mathforum.org/library/drmath/view/66535.html
CÁM ơn bác nhiều