2021-02-06

(defun as-string (x)
    (format nil "~a" x))
;;;;日期转化
;支持对象(按交易日):
;    M-1,M1,M2,M3...MN
;    W-1,W1,W2,W3...WN
;按交易日处理;日期表示每月第N个交易日或每周第N个交易日
;负数表示倒数
(defun cvt-to-date (x)
    (labels ((offset (d)
                (cond
                    ((null d) 0)
                    ((= d 0) 0)
                    ((> d 0) (1- d))
                    ((< d 0) (1+ d)))))
                    
        (let* ((s (as-string x))
               (s0 (elt s 0))
               (ds (parse-integer (subseq s 1) :junk-allowed t)))
            (as-string
                (cond
                    ((null ds) "00000000")
                    ((char-equal s0 #\W)
                        (whj.calendar:GET-NEXT-DATE 
                            (if (>= ds 0) 
                                (WHJ.CALENDAR:GET-WEEK-FIRST-DATE *today* T)
                                (WHJ.CALENDAR:GET-WEEK-LAST-DATE *today*  T))
                             (offset ds)
                             :T-P T))
                            
                    ((char-equal s0 #\M)
                        (whj.calendar:GET-NEXT-DATE 
                            (if (>= ds 0) 
                                (WHJ.CALENDAR:GET-MONTH-FIRST-DATE *today* T)
                                (WHJ.CALENDAR:GET-MONTH-LAST-DATE *today* T))
                             (offset ds)
                             :T-P T))
                    (t
                        "00000000"))))))

判定方法:

(member (as-string *today*) (mapcar #'cvt-to-date date-list) :test #'string=)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值