基姆拉爾森計算公式

基姆拉爾森計算公式外文名是Kim larsson calculation formula。

算法

算法如下:

基姆拉爾森計算公式(C++與VB.Net整數除法和取余運算符不同)

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 //C++計算公式

W = (D + 2 * M + 3 * (M + 1) \ 5 + Y + Y \ 4 - Y \ 100 + Y \ 400+1) Mod 7 'VB.Net計算公式

在公式中d表示日期中的日數,m表示月份數,y表示年數。

注意:在公式中有個與其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10則換算成:2003-13-10來代入公式計算。

代碼

代碼如下:

// java code

//y-年,m-月,d-日期

string CaculateWeekDay(int y,int m, int d)

{

if(m==1||m==2) {

m+=12;

y--;

}

int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;

string weekstr="";

switch(week)

{

case 1: weekstr="星期一"; break;

case 2: weekstr="星期二"; break;

case 3: weekstr="星期三"; break;

case 4: weekstr="星期四"; break;

case 5: weekstr="星期五"; break;

case 6: weekstr="星期六"; break;

case 0: weekstr="星期日"; break;

}

return weekstr;

}

// C語言代碼如下:測試的日期為2013年1月1號,結果為星期二;

#include <stdio.h>
void main()
{
int y=2013,m=1,d=1;
int w;
char *weekday[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
if (m==1 || m==2)
{

m=(m==1?13:14);

y=y-1;//此處表示把1,2月計算到上一年的13,14月<修改日期:2014.5.13 by 楊康佳>

}

w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
printf("%s\n",weekday[w]);
}

//C#代碼如下,測試時間2015.2.9 結果為星期一

/*

* @作者:007

* @時間:2015.2.9

* @版本:V1.0

*/

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace class_8

{

class Program

{

static void Main(string[] args)

{

//定義時間

int year = 2015, month = 2, day = 13;

//用戶輸入

//年

Console.Write("Please input year = ");

year = Convert.ToInt32(Console.ReadLine());

Console.Write("\n");

//月

Console.Write("Please input month = ");

month = Convert.ToInt32(Console.ReadLine());

Console.Write("\n");

//日

Console.Write("Please input day = ");

day = Convert.ToInt32(Console.ReadLine());

Console.Write("\n");

//將1、2月轉換為上一年的13、14月

if (month == 1 || month == 2)

{

year = year - 1;

month = month + 12;

}

//用基姆拉爾森公式計算星期

int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7;

Console.WriteLine("the week is {0}",week);

}

}

}

其他參考

參考

fun1(y,m,d)

{

int k;

if(m==1||m==2){m+=12;y--;}

return (int)((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7;

}

調試了2007,很正確的輸出了

基姆拉爾森計算公式改進

int fun_change(int year, int month, int day)

{

if(month == 1 || month == 2)

{

month += 12;

--year;

}

int week = -1;

week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 -year / 100 +year / 400) % 7 + 1;

return week; // 輸出-1為錯誤

}

輸出1-7 分別代表 周一到周日,少了上述的switch語句。(已測試)

相關詞條

相關搜尋

熱門詞條

聯絡我們