萬年曆 Perpetual Calendar

簡單的萬年曆(Perpetual Calendar),也有小技巧唷。

又是在我那萬年沒有整理的硬碟中發現這支程式,他是一點簡單的萬年曆,其實萬年曆的寫法真的好多種,每個人的想法不一樣,所想出來的演算法也不一樣,小小看了一下當年寫的程式,方法非常的簡單,利用某一年的1月1日是星期一當作基準去計算所要看到的當年、月、日的資料,最重要的部分是在計算閏年的部分,很多人都以為只要是整除4的年份就是閏年,其實不然:

>> 整除4的年份為閏年

>> 整除100的年份為平年(ex:1900、1800)

>> 整除400的年份為閏年(ex:1600、2000)

若是要更精確的計算也有人加入整除4000的年份也不是閏年,只是西元4000年離我們好遠,我想到時候.Net已經出到第.Net 500 SP1了吧,應該會有別的高手去寫新的萬年曆,我在這邊先好好分享我的程式碼就好了。

 

1.宣告一個陣列,儲存1到12月每個月的"平年"天數。


	Dim days() As Integer = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

 

2.這邊因為是範例,所以只用到1995年當作基準年計算這之中有多少個閏年,其實也可以找更久遠以前的,當然,越久遠越好,只是太久了迴圈要多跑幾圈,真空管電腦應該不是和這個程式喔。


	For yy = 1995 To Val(ComboBox1.Text) Step 1
    If (yy Mod 4 = 0 And yy Mod 100 <> 0) Then
        leap = leap + 1
    ElseIf (yy Mod 100 = 0 And yy Mod 400 = 0) Then
        leap = leap + 1
    End If
Next

 

3.加入上面所說的判定閏年演算法。


	If (Val(ComboBox1.Text) Mod 4 = 0 And Val(ComboBox1.Text) Mod 100 <> 0) Then
    leap_tf = 1
    dd = (Val(ComboBox1.Text) - 1995) * 365 + leap - 1
    days(2) = 29
ElseIf (Val(ComboBox1.Text) Mod 100 = 0 And Val(ComboBox1.Text) Mod 400 = 0) Then
    leap_tf = 1
    dd = (Val(ComboBox1.Text) - 1995) * 365 + leap - 1
    days(2) = 29
Else
    leap_tf = 0
    dd = (Val(ComboBox1.Text) - 1995) * 365 + leap
End If

 

4.判斷星期幾。


	week_dd = dd Mod 7

 

基本上這樣就大功告成了,至於要用什麼樣的形式展現就要看您自己怎麼設計啦。

PeterDotNetVB1009170201

 

PeterDotNetVB10091702.zip