天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 80|回复: 0

返回两个日期之间的天数(年月日)

[复制链接]
  • TA的每日心情
    开心
    昨天 19:57
  • 签到天数: 81 天

    [LV.6]常住居民II

    1564

    主题

    203

    回帖

    214748万

    积分

    管理员

    积分
    2147483647
    发表于 2024-4-7 09:23:46 | 显示全部楼层 |阅读模式
    1. (K:LstDateDist
    2.      (list 2024 01 05)
    3.      (list 2024 01 08)
    4. ) ;-> 返回3


    5. ;返回两个(Lst)日期之间的天数,Lst = (list Year Moth Date)
    6. (defun K:LstDateDist (Lst1 Lst2 / TolDay MaxLst MinLst i)
    7.     (setq TolDay 0)
    8.     (setq Lst1 (cons (car Lst1)(apply 'K:Date4Year Lst1))
    9.           Lst2 (cons (car Lst2)(apply 'K:Date4Year Lst2))
    10.     );重构表为:年份+当年日期的天数
    11.     (if (eq (car Lst1) (car Lst2));年份相等
    12.         (setq TolDay (abs (- (cdr Lst1) (cdr Lst2))));当年日期之差
    13.         (progn
    14.             (setq MaxLst (assoc (max (car Lst1) (car Lst2)) (list Lst1 Lst2))
    15.                   MinLst (assoc (min (car Lst1) (car Lst2)) (list Lst1 Lst2))  
    16.             );找最大和最小
    17.             (setq i 0 TolDay 0)
    18.             (repeat (setq i (- (car MaxLst) (car MinLst)))
    19.                 (setq TolDay
    20.                     (+  TolDay
    21.                         (if (K:IsLeapYear (+ (setq i (1- i)) (car MinLst))) 366 365);指定年份的天数
    22.                     )
    23.                 )
    24.             )
    25.             (setq TolDay (+ TolDay (cdr MaxLst) (- (cdr MinLst))));加大减小
    26.         )
    27.     )
    28.     TolDay
    29. )


    30. ;判断指定年份(完整年份, 如2024年)是否为闰年
    31. (defun K:IsLeapYear (Year)
    32.   (if (equal (rem Year 4.0) 0.0 0.00001)
    33.       (if (equal (rem Year 100.0) 0.0 0.00001);测试整除100年的例外
    34.           (if (equal (rem Year 400.0) 0.0 0.00001);测试整除400年的双重例外
    35.               T   ;整除400是闰年
    36.               nil ;整除100但不能整除400的年份为闰年
    37.           )
    38.           T ;整除4但不能整除100的年份为闰年
    39.       )
    40.       nil ;不能整除4的年份不是闰年
    41.   )
    42. )
    43. ;返回指定日期是当年的第几天
    44. (defun K:Date4Year (Year Moth Date / EvMothLst m d)
    45.   (if (and (numberp Year) (numberp Moth) (numberp Date))
    46.       (progn
    47.           (setq EvMothLst   
    48.                 (list
    49.                   (cons 1 31)
    50.                   (cons 2 (if (K:IsLeapYear Year) 29 28))
    51.                   (cons 3 31)
    52.                   (cons 4 30)
    53.                   (cons 5 31)
    54.                   (cons 6 30)
    55.                   (cons 7 31)
    56.                   (cons 8 31)
    57.                   (cons 9 30)
    58.                   (cons 10 31)
    59.                   (cons 11 30)
    60.                   (cons 12 31)
    61.                 )
    62.           );指定年份每个月及天数的关联表
    63.           (setq m 1 d 0)
    64.           (while (< m Moth)
    65.               (setq d (+ (cdr (assoc m EvMothLst)) d)
    66.                     m  (1+ m)
    67.               )
    68.           )
    69.           (+ d Date)
    70.       )
    71.   )
    72. )




    73. ;格式化时间成列表(STR/Real)
    74.       (defun K:Time2Lst (STR)
    75.         (if (numberp STR) (setq STR (rtos STR 2 0)));Real/Int -> STR
    76.         (mapcar
    77.           'atoi
    78.           (list
    79.             (substr STR 1 4)
    80.             (substr STR 5 2)
    81.             (substr STR 7 2)
    82.           )
    83.         )
    84.       )










    复制代码

     

     

     

     

    返回两个日期之间的天数(年月日)
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-5-16 08:00 , Processed in 0.057869 second(s), 21 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表