计算出来有误,星期的数据是否要调整一下。
另外好像平年、闰年的计算方式不一样
例如:
二十一世纪新前年虫算法(20%4*5=0)
公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7
=(20%4*5天+年+年/4+闰年月星期表+日+2天)%7
即:某日星期几=(年+年/4+闰年月星期表+日+2天)%7
貌似程序出错了,今天应该是星期三。
;;;显示日期、星期几
;;;zml84 修改后
;;;pengq2010 2011.04.27 修改("二" "三" "四" "五" "六" "日" "一" )
(defun c:TE (/ tmp y m d lst)
(setq tmp (rtos (getvar "cdate") 2 0)
y (substr tmp 1 4)
m (substr tmp 5 2)
d (substr tmp 7 2)
)
(setq tmp (fix (getvar "date"))
tmp(rem (1- tmp )7)
lst '("二" "三" "四" "五" "六" "日" "一" )
tmp (nth tmp lst)
)
(ALERT (STRCAT (strcat "今天是:" y "年" m "月" d "日")
"\n\t星期"
tmp
"\n\n期待一个好日子,"
"\n继续埋首工作里,"
"\n期待着下一个假期"
)
)
) 本帖最后由 zml84 于 2011-4-27 12:55 编辑
一、10楼帖子已更正,计算应无误。【更正内容为:第10行函数 1- 修改为 1+ 即可】
二、若要以年月日做纯数值计算,请验证下面函数:
;;;=============================================
;|
w = (d + 1 + 2*m + (3*m+3)/5 + y + y/4 - y/100 + y/400) mod 7
: 其中的除法均为整除(向下取整)
: w 为星期数,星期日为 0
: d 为日期数
: m 为月数,1月2月算作前一年的13月14月
: y 为年数
: 比如 2000年1月1日,d=1, m=13, y=1999,算得 w=6
: 2002年5月17日, d=17, m=5, y=2002, 算得 w=5
|;
;;;=============================================
;;;功能:已知年月日,获取星期几
;;;返回:星期几,0表示星期日。
(defun ZL-GetWeek (yyyy mm dd / tmp)
(if (<= mm 2)
(setq mm (+ mm 12)
yyyy (1- yyyy)
)
)
(setq tmp (+ 1
dd
(* 2 mm)
(/ (+ (* 3 mm) 3) 5)
yyyy
(/ yyyy 4)
(/ yyyy -100)
(/ yyyy 400)
)
)
;;(print tmp)
(rem tmp 7)
)
;;;=============================================
三,不得不说,明经论坛lisp代码着色有待大大提高。 本帖最后由 461045462 于 2011-4-27 20:05 编辑
原10楼帖子修改下面语句也行,好像不必修改:1- 修改为 1+
lst '("二" "三" "四" "五" "六" "日" "一" )
13楼已经修改了,没有注意,不好意思
本帖最后由 pengq2010 于 2011-4-28 12:08 编辑
回复 zml84 的帖子
请教下data的值是什么值,怎么换算的呢。 pengq2010 发表于 2011-4-27 10:36 static/image/common/back.gif
没法运行的,是有隐藏的东西么。。。
页:
1
[2]