[载自中文开发在线http://www.codelphi.com]
星期速算
jangill
历史上的某一天是星期几,可利用高斯函数,我们可根据设闰的规律,推算出公元X年第Y天是星期几,这里变量X是公元的年数,变量Y是从这一年元旦算起,至这一天为止的天数(含这一天),历法家为我们找到了这样一个公式:
S=(X-1)+[(X-1)/4]-[(X-1)/100]+[(X-1)/400]+Y
(注:这里的是高斯函数,S是它的变量,可以是整型,也可以是实型,意为取不大于S的最大整数)
按上式算出S后,除以7,余几即为星期几,若除尽,则为星期日.
例:1994年1月14日是星期几,
S=(1994-1)+[(1994-1)/4]-[(1994-1)/100]+[(1994-1)/400]+14
=1993+498-19+4+14
=2490
S除以7商355余5,所以 1994年1月14日是星期五.
我自制了一个函数 GETWEEK(),如下:
FUNCTION GETWEEK(CONST DA:TDATE):INTEGER
VAR DASTR:STRING
YEAR,MONTH,DAY,DAYS,SUM,DAY1,DAY2,I:INTEGER
BEGIN
DASTR:=DATETOSTR(DA)
YEAR:=STRTOINT(DASTR[1]+DASTR[2]+DASTR[3]+DASTR[4])
MONTH:=STRTOINT(DASTR[6]+DASTR[7])
DAY:=STRTOINT(DASTR[9]+DASTR[10])
IF ((YEAR MOD 400)=0 ) OR (((YEAR MOD 4)=0) AND ((YEAR MOD 100)<> 0))
THEN DAY2:=29
ELSE DAY2:=28
//GET_DAYS
DAYS:=0
FOR I:=1 TO MONTH-1 DO
BEGIN
CASE I OF
1,3,5,7,8,10,12: DAY1:=31
4,6,9,11: DAY1:=30
2: DAY1:=DAY2
END
DAYS:=DAYS+DAY1
END
DAYS:=DAYS+DAY
SUM:=(YEAR-1) + ((YEAR-1) DIV 4) - ((YEAR-1) DIV 100) +((YEAR-1) DIV 400) +DAYS
GETWEEK:=SUM MOD 7
END
本程序在DELPHI5.0,WINDOWS98SE 环境下运行通过。
投稿人:jangill 投稿日期:2001-8-9 9:22:00