发件人:Branko Radovanovic
主题:两个日期之间的天数差
Message-ID: <199602161231.NAA18023@pinus.cc.etf.hr>
日期:1996年2月16日星期五 13:31:39 +0100

我建议使用以下代码来解决计算两个日期之间的天数差以及确定给定日期的星期的问题。

#define DayOfWeek(d,m,y) (int)(DaysElapsed(d,m,y) % 7)

long DaysElapsed(int d,int m,int y) {
    static int cd[]={0,31,59,90,120,151,181,212,243,273,304,334};
    long n=365L*(y-1);

    if (m<3) y--;
    return n+y/4-y/100+y/400+cd[m-1]+d;
}

DayOfWeek 宏与 Tomohiko Sakamoto 发布的代码工作方式完全相同,而日期 date1 和 date2(date1<=date2)之间的天数差可以简单地这样计算:

difference=DaysElapsed(d2,m2,y2)-DaysElapsed(d1,m1,y1);

我认为这比使用 mktime() 要好得多。该代码 100% 可移植(甚至可以跨 C 以外的其他语言),比 mktime() 更快、更小、更简单,并且没有年份范围限制。

Branko Radovanovic