2008年11月26日

[C#] - 日期計算的問題--PartI 計算兩日期的相差天數

日期計算看似不難,但是算起來要人命= =...



要考慮到年是否有閏年,月是否大小月,二月是否有29天,日期30或31天

光這些判斷式,寫完都睡著了@@

以下是在網路上查到的方式,用C#來寫

他的公式如下:

                 N=1461 * f(年, 月) ÷ 4 + 153 * g(月) ÷ 5 +日

                 其中:

                            f(年, 月) = 年-1 如果月<=2

                                           =年 其他情況

                                 g(月) =月+13 如果月<=2

                                           =月+1 其他情況

                                           (對於1900/3/1以後上式都成立)

看完這個公式還不太瞭解的話,請往下再看

===========================================================================



//checksum=20081022125525(年月日時分秒)
public string cal(int checksum)
{

int temp;
int day1 = checksum % 100;
temp = checksum / 100;
int month1 = temp % 100;
int year1 = temp / 100;
//以上是將checksum的日期分離出來
DateTime dt = DateTime.Now;
int day2 = dt.Day;
int month2 = dt.Month;
int year2 = dt.Year;
//以上是取得當下系統時間
if (month1 <= 2)
{
year1 = year1 - 1;
month1 = month1 + 13;
}
else
{
month1 = month1 + 1;
}
if (month2 <= 2)
{
year2 = year2 - 1;
month2 = month2 + 13;
}
else
{
month2 = month2 + 1;
}
//以上為年月的判斷式,為了實現下面的公式的前置工作

int N1 = 1461 * year1 / 4 + 153 * month1 / 5 + day1;
int N2 = 1461 * year2 / 4 + 153 * month2 / 5 + day2;
int daycount = N2 - N1;
//daycount就是相差的天數哩!!
return daycount.ToString();
}

=========================================================================

1 則留言:

  1. 那個

    很久之前很多關的那個遊戲

    我破到第六關啦 ~~~

    厲害吧厲害吧 XD

    不過第六關又卡關了 = =

    回覆刪除