史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   星期的公式 (http://forum.slime.com.tw/thread163158.html)

netbird 2005-12-12 01:31 PM

星期的公式
 
就是使用什麼原理或公式,可以算出某年某月某日是星期幾?

例如:1983年3月20號是星期幾

mini 2005-12-12 02:22 PM

每一種語言都有自己的保留字函式可用
比如 VB 是 Weekday
===================
Weekday 函數範例
本範例使用 Weekday 函數來傳回某一日期為星期幾。

Dim MyDate, MyWeekDay
MyDate = #February 12, 1969# ' 指定一日期。
MyWeekDay = Weekday(MyDate) ' MyWeekDay 的值為 4,因為 MyDate 是星期四。
===================

其實要自己設計也很簡單的
以公元0001年為起點
每四年有一個潤年
所以 (公元XXXX年 / 4) 看能否整除
能的話 當年的2月即為29天
否則 當年的2月即為28天
那其他月份是固定的
大月(31天) 1 3 5 7 8 10 12
小月(30天) 4 6 9 11

0001年 01月 01日 是 星期一
所以VB裡
MsgBox Weekday("0001 01 01")
會出現 "2" (代表星期一)

回過頭來
1983年3月20號是星期幾?
1983 mod 4 = 3 不是潤年(2月只有28天)
所以 1月+2月=31+28 再 +20 = 第79
0001~1983 總共 365*(1983-1)= 723430
再加每4年多一天= (1983-1)/4 捨棄小數點 = 495

1983年3月20號= 723430+495+79= 公元第724004天
724004 mod 7 = 1,所以是 星期日
(如果 mod 7 = 0,表示是星期六)

換算表
##########
星期日 = 1
星期一 = 2
星期二 = 3
星期三 = 4
星期四 = 5
星期五 = 6
星期六 = 0
##########

驗證

2000年 12月 12日 (星期2)
729635+
499+
(186+120+29)=335+
12=730481

2005年 12月 01日 (星期4)
731460+
501+
(186+120+28)=334+
1=732296

1995年 07月 12日 (星期3)
727810+
498+
(93+60+28)=181+
12=728501

snoopy 2005-12-12 03:28 PM

我想把日期的規則都寫進程式就可以了
如果用Java的話 可以用Date類別處理

getter 2005-12-12 04:57 PM

引用:

作者: mini
每一種語言都有自己的保留字函式可用
比如 VB 是 Weekday
===================
Weekday 函數範例
本範例使用 Weekday 函數來傳回某一日期為星期幾。

Dim MyDate, MyWeekDay
MyDate = #February 12, 1969# ' 指定一日期。
MyWeekDay = Weekday(MyDate) ' MyWeekDay 的值為 4,因為 MyDate 是星期四。
========...

好利害阿 . . .

netbird 2005-12-13 12:27 AM

謝謝

我是使用perl寫的,他也有函數可以直接拿到系統的星期

但我要從檔案讀出資料再運算,所以需要公式

我已經想了兩天,我之後要mod 7,看餘數,就是是在潤年怎麼算就搞混了

我參考了下面的很多種方法,看起來可以,但那麼多種,看了便搞混了
http://www.geocities.com/calshing/dayofweek.htm

現在已經寫出來了,謝謝mini大


所有時間均為台北時間。現在的時間是 12:49 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1