W = (d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) mod 7
d:日、m:月、y:年。W:1=一、2=二、...、6=六、0=日 (或 7=日視實作調整)。
string CalculateWeekDay(int y, int m, int d)
{
if (m == 1) { m = 13; y--; }
else if (m == 2) { m = 14; y--; }
int w = (d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) % 7;
string[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
return weeks[w];
}
Label1.Text = CalculateWeekDay(2004, 12, 9); // 輸出:星期四
.NET 內建 DateTime.DayOfWeek 已完整實現且經過測試:
DayOfWeek dow = new DateTime(2004, 12, 9).DayOfWeek; // Thursday
string chinese = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }[(int)dow];
實務開發**強烈建議直接使用 DateTime.DayOfWeek**,除非有特殊教學或無框架環境需求。