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
Gió viết 22:22 ngày 30/09/2018

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

viết 22:30 ngày 30/09/2018

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)

Nguyen Dong viết 22:26 ngày 30/09/2018

Bạn có thể đếm từng ngày một, ví dụ

while (firstDay != lastDay) {
    firstDay++;
    counter++;
}

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)

X viết 22:32 ngày 30/09/2018

Có một cách thần thánh như sau:

int thisIsMagic(int year, int month, int day) {
        if (month < 3) {
            year--;
            month += 12;
        }
        return 365*year + year/4 - year/100 + year/400 + (153*month - 457)/5 + day - 306;
    }

int numberOfDays = thisIsMagic(2016, 4, 6) - thisIsMagic(2010, 3, 4);

viết 22:28 ngày 30/09/2018

thế nào cách này cũng có liên quan tới Gauss

Vo MinhTam viết 22:23 ngày 30/09/2018

Đạ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 ợ?

Do Ngoc Anh viết 22:30 ngày 30/09/2018

cái này thì hình như anh ấy tính mốc từ năm 0 bạn ạ

Do Ngoc Anh viết 22:19 ngày 30/09/2018

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

X viết 22:27 ngày 30/09/2018

Bạn vào đây có giải thích nhé
http://mathforum.org/library/drmath/view/66535.html

Do Ngoc Anh viết 22:27 ngày 30/09/2018

CÁM ơn bác nhiều

Bài liên quan
0