革天明 发表于 2011-4-25 13:56:33

计算星期几

;;;显示日期
;itoa函数将一个【整数】转换成【字符串】,并将该字符串返回
;rtos函数将一个【实数】转换成【字符串】,并将该字符串返回
;atof将一个【字符串】转换成【实数】,并将该字符串返回
;ATOI 字符串转整数
;subcat将多个字符串拼接成一个长字符串后返回
;substr将一个字符串按要求取出其中的字符。
;;;显示日期
(defun c:TE(/ tmp y m d txt1 pt1)
(setq tmp (rtos (getvar "cdate") 2 8)
y   (rtos (atof (substr tmp 1 4)) 2 0)
m   (rtos (atof (substr tmp 5 2)) 2 0)
d   (rtos (atof (substr tmp 7 2)) 2 0)
txt1 (strcat "今天是:" y "年" m "月" d "日")
)
(SETQ M1(ATOI M))
(SETQ D1(ATOI D))
(SETQ YC(ATOI (substr Y 1 2)))
(SETQ YA(ATOI (substr Y 3 2)))
(IF (<= M1 2)
      (SETQ YA (+ 1 YA))
      (SETQ M1 (+ 12 M1))
)
(SETQ W (-
            (+ (/ YC 4) (/ YA 4) YA (ATOI(RTOS(* 2.6 (+ M1 1)))) D1)
            (* 2 YC)
            1
          )
)      
;(SETQ TXT2 (STRCAT TXT1 (CHR 13) "今天是星期" W))
;(alert txt2)
(SETQ W1 (- 7 (ATOI(RTOS (/ W 7)))))
(IF (= 0 W1) (SETQ W2 "日"))
(IF (= 1 W1) (SETQ W2 "一"))
(IF (= 2 W1) (SETQ W2 "二"))
(IF (= 3 W1) (SETQ W2 "三"))
(IF (= 4 W1) (SETQ W2 "四"))
(IF (= 5 W1) (SETQ W2 "五"))
(IF (= 6 W1) (SETQ W2 "六"))
(SETQ TXT2 (strcat "今天是星期" W2))
(ALERT (STRCAT TXT1 (CHR 13) TXT2 (CHR 13)"期待一个好日子,"(CHR 13)"继续埋首工作里,"(CHR 13)"期待着下一个假期"))

)
想实现提示今天星期几,可总是参数的类型不对,怎么办?

革天明 发表于 2011-4-25 13:57:36

SETQ W那句是蔡勤公式,计算星期几的

x_s_s_1 发表于 2011-4-25 14:23:08

本帖最后由 x_s_s_1 于 2011-4-25 14:23 编辑

(menucmd "M=$(edtime,$(getvar,date),DDDD)")

革天明 发表于 2011-4-25 14:42:27

x_s_s_1 发表于 2011-4-25 14:23 static/image/common/back.gif
(menucmd "M=$(edtime,$(getvar,date),DDDD)")

这个可以得到日期,我的麻烦些,可目前是能得到日期,可不能通过日期代入蔡勤公式计算星期几,老是提示数据类型错误。stringgp2

zark 发表于 2011-4-25 14:58:28

楼主好辛苦

x_s_s_1 发表于 2011-4-25 15:52:23

(setq a (menucmd "M=$(edtime,$(getvar,date), YYYY)")
      b (menucmd "M=$(edtime,$(getvar,date), MONTH)")
      c (menucmd "M=$(edtime,$(getvar,date), D)")
      d (menucmd "M=$(edtime,$(getvar,date), DDDD)")
      )
(SETQ TXT(STRCAT "今天是" a "年" b c "日" (CHR 13) d (CHR 13)"哥们儿这么累跳槽吧"))
(alert txt)

zhongys 发表于 2011-4-25 22:48:39

不错,做得可以。

mandala 发表于 2011-4-25 23:08:03

本帖最后由 mandala 于 2011-4-25 23:08 编辑

顶一下楼主。我有时候非常佩服一些同志,他们会想到用lisp上网、听歌、看书……还要标注今天星期几。我做梦都没想到过要用lisp来干这种事。

革天明 发表于 2011-4-26 02:27:50

我那样写是为了计算星期几的,如果只是显示日期我的是麻烦些,我计算星期的公式没错,设断点也可以,但运行就提示类型错误,请教!

zml84 发表于 2011-4-26 13:13:16

RE: 搞得太复杂!

本帖最后由 zml84 于 2011-4-27 12:47 编辑



;;;显示日期、星期几
;;;zml84 修改后
(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期待着下一个假期"
         )
)
)
页: [1] 2
查看完整版本: 计算星期几