如何计算每年第n天是星期几
先以计算每年的第一天是星期几为例
原理:
1.如果知道公元1年的第1天是星期x,设公元1年的第一天为起始天,那么计算某年的第一天是星期几只需计算出该天是从公元第一天开始数的第几天(等于与起始天的差值f+1),将其除7,得到的商为相差的周数,用取整后f+1(由于有闰年存在,之后解释)减去相差周数*7得到s,若公元一年第一天为星期x,s=0则为星期x-1,s=1则为星期x,s=2则为星期x+1,依次递推
2.闰年有366天,闰年的定义为:凡是年份能够被4整除、且不能被100整除的是闰年;凡是年份能被400整除的也是闰年;除此以外的年份都不是闰年。
算法推理过程:
设某年为y,该年第一天与起始天的差值f-1为(y-1)*365再加上y-1与公元1年之间的闰年数(因为闰年比平年多一天),首先能够被4整除的可能是闰年,总数为(y-1)/4,但被4整除且能被100整除的不是闰年,需减去(y-1)/100(因为被100整除一定能被4整除,这部分多加了),被400整除的是闰年,需加上(y-1)/400(因为被400整除一定能被100整除,这部分多减了)
那么f=
f=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+1
若其中没有闰年,后面三项会出现小数,所以应把求得的f取整
那么
s=int(f)-int(f/7)*7
公元1年第一天为星期一
s=0为星期日
s=1为星期一
…
以此类推
计算第n天只需将f最后项的+1改为+n即可
代码(按钮控件):
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim y, k, s As Integer
Dim f As Double
y = TextBox1.Text
f = ((y - 1) + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400) + 1
k = Int(f) - Int(f / 7) * 7
Select Case k
Case 0
TextBox2.Text = "星期日"
Case 1
TextBox2.Text = "星期一"
Case 2
TextBox2.Text = "星期二"
Case 3
TextBox2.Text = "星期三"
Case 4
TextBox2.Text = "星期四"
Case 5
TextBox2.Text = "星期五"
Case 6
TextBox2.Text = "星期六"
End Select
End Sub