yu960312 发表于 2022-9-9 22:00:59

lsp如何获取前三天的日期

如题 lsp如何获取前三天的日期

假如今天是:2022/09/01
三天前的日期为:2022/08/29
则返回20220829
具体的日期格式转换是怎么操作的
请大佬指点指点

baitang36 发表于 2022-9-9 22:36:43

本帖最后由 baitang36 于 2022-9-9 22:41 编辑

可以用保留函数来实现

(load "c:/00/trf_9.fas")
(tranf "ymd->fix")
(tranf "fix->ymd")
(setq aa (ymd->fix 2022 9 1))
(setq aa (- aa 3))
(fix->ymd aa)

返回的是表(2022 8 29)

飞雪神光 发表于 2022-9-10 00:05:45

baitang36 发表于 2022-9-9 22:36
可以用保留函数来实现

(load "c:/00/trf_9.fas")


大佬你好 我测试发现这俩函数计算时是按每个月31天来算的
比如
(setq aa (ymd->fix 2022 7 1))
(setq aa (- aa 3))
(fix->ymd aa)
返回(2022 6 29)
(setq aa (- aa 1))
(fix->ymd aa)
返回(2022 6 31)

yu960312 发表于 2022-9-10 00:53:26

飞雪神光 发表于 2022-9-10 00:05
大佬你好 我测试发现这俩函数计算时是按每个月31天来算的
比如
(setq aa (ymd->fix 2022 7 1))


试了一下确实如此,每个月按31天计算的

yu960312 发表于 2022-9-10 00:55:52

baitang36 发表于 2022-9-9 22:36
可以用保留函数来实现

(load "c:/00/trf_9.fas")


大佬,试了一下确实如此,每个月按31天计算的

crtrccrt 发表于 2022-9-10 04:21:55

本帖最后由 crtrccrt 于 2022-9-18 17:55 编辑

儒略日,与年月日,互转,
准确天误,自行百度。
支持好几千年内日期。

飞的鱼儿 发表于 2022-9-16 16:50:27

实在不行,做个真实的日历TXT,放进LISP就行了。用最直接,最粗暴方法。

yu960312 发表于 2022-9-17 08:52:24

飞的鱼儿 发表于 2022-9-16 16:50
实在不行,做个真实的日历TXT,放进LISP就行了。用最直接,最粗暴方法。

有点麻烦,用vba倒是可以,但高版本CAD要单独安装VBA模块又太麻烦

highflybird 发表于 2022-9-18 08:20:46

本帖最后由 highflybird 于 2022-9-18 08:36 编辑

这个问题可以用脚本语言来。
如:(vlax-invoke scr 'run "MyDateAdd" "d" -3 "2022/9/18")
或者:(vlax-invoke scr 'eval "FormatDateTime(DateAdd(\"d\",-3,date))")
下面是几个与日期相关函数的获取:
;;;Ref https://www.w3school.com.cn/vbscript/vbscript_ref_functions.asp
;;;常用日期时间相关函数
(defun c:getDate (/ scr date now)
(or
    (setq SCR (vlax-create-object "Aec32BitAppServer.AecScriptControl.1"))
    (setq SCR (vlax-create-object "ScriptControl"))
)
(if scr
    (progn
      (vlax-put scr 'language "VBScript")
      (vlax-invoke scr 'addcode
      "Function MyDate
      Mydate = Date
      End Function
      Function MyNow
MyNow = Now
      End Function
      Function MyFormatDateTime(nDate)
      MyFormatDateTime = FormatDateTime(nDate)
      End Function
      Function MyDateAdd(interval,number,sdate)
MyDateAdd = FormatDateTime(DateAdd(interval,number,sdate))
      End Function
      Function MyDateValue(sdate)
MyDateValue = DateValue(sdate)
      End Function
      Function MyDateDiff(interval,date1,date2)
      MyDateDiff = DateDiff(interval,date1,date2)
      End Function"
      )
      (setq date (vlax-invoke scr 'run "MyDate"));当前系统日期
      (setq now (vlax-invoke scr 'run "MyNow"));当前系统时间
      (vlax-invoke scr 'run "MyFormatDateTime" now);格式化日期
      (vlax-invoke scr 'run "MyDateAdd" "d" -3 date);三天前日期
      (vlax-invoke scr 'run "MyDateValue" "2022-Jan-02");日期转数值
      (vlax-invoke scr 'run "MyDateDiff" "d" "1949/10/1" now);两个日期之间的时间间隔数
      (vlax-release-object scr)
      (princ)
    )
)
)


yu960312 发表于 2022-9-19 05:08:37

highflybird 发表于 2022-9-18 08:20
这个问题可以用脚本语言来。
如:(vlax-invoke scr 'run "MyDateAdd" "d" -3 "2022/9/18")
或者:(vlax-i ...

感谢大佬解惑
页: [1] 2
查看完整版本: lsp如何获取前三天的日期