明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1669|回复: 10

[提问] lsp如何获取前三天的日期

[复制链接]
发表于 2022-9-9 22:00:59 | 显示全部楼层 |阅读模式
如题 lsp如何获取前三天的日期

假如今天是:2022/09/01
三天前的日期为:2022/08/29
则返回20220829
具体的日期格式转换是怎么操作的
请大佬指点指点
发表于 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 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)
 楼主| 发表于 2022-9-10 00:53:26 | 显示全部楼层
飞雪神光 发表于 2022-9-10 00:05
大佬你好 我测试发现这俩函数计算时是按每个月31天来算的
比如
(setq aa (ymd->fix 2022 7 1))

试了一下确实如此,每个月按31天计算的
 楼主| 发表于 2022-9-10 00:55:52 | 显示全部楼层
baitang36 发表于 2022-9-9 22:36
可以用保留函数来实现

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

大佬,试了一下确实如此,每个月按31天计算的
发表于 2022-9-10 04:21:55 | 显示全部楼层
本帖最后由 crtrccrt 于 2022-9-18 17:55 编辑

儒略日,与年月日,互转,
准确天误,自行百度。
支持好几千年内日期。
发表于 2022-9-16 16:50:27 | 显示全部楼层
实在不行,做个真实的日历TXT,放进LISP就行了。用最直接,最粗暴方法。
 楼主| 发表于 2022-9-17 08:52:24 | 显示全部楼层
飞的鱼儿 发表于 2022-9-16 16:50
实在不行,做个真实的日历TXT,放进LISP就行了。用最直接,最粗暴方法。

有点麻烦,用vba倒是可以,但高版本CAD要单独安装VBA模块又太麻烦
发表于 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))")
下面是几个与日期相关函数的获取:
  1. ;;;Ref https://www.w3school.com.cn/vbscript/vbscript_ref_functions.asp
  2. ;;;常用日期时间相关函数
  3. (defun c:getDate (/ scr date now)
  4.   (or
  5.     (setq SCR (vlax-create-object "Aec32BitAppServer.AecScriptControl.1"))
  6.     (setq SCR (vlax-create-object "ScriptControl"))
  7.   )
  8.   (if scr
  9.     (progn
  10.       (vlax-put scr 'language "VBScript")
  11.       (vlax-invoke scr 'addcode
  12.         "Function MyDate
  13.         Mydate = Date
  14.         End Function
  15.         Function MyNow
  16.   MyNow = Now
  17.         End Function
  18.         Function MyFormatDateTime(nDate)
  19.         MyFormatDateTime = FormatDateTime(nDate)
  20.         End Function
  21.         Function MyDateAdd(interval,number,sdate)
  22.   MyDateAdd = FormatDateTime(DateAdd(interval,number,sdate))
  23.         End Function
  24.         Function MyDateValue(sdate)
  25.   MyDateValue = DateValue(sdate)
  26.         End Function
  27.         Function MyDateDiff(interval,date1,date2)
  28.         MyDateDiff = DateDiff(interval,date1,date2)
  29.         End Function"
  30.       )
  31.       (setq date (vlax-invoke scr 'run "MyDate"));当前系统日期
  32.       (setq now (vlax-invoke scr 'run "MyNow"));当前系统时间
  33.       (vlax-invoke scr 'run "MyFormatDateTime" now);格式化日期
  34.       (vlax-invoke scr 'run "MyDateAdd" "d" -3 date);三天前日期
  35.       (vlax-invoke scr 'run "MyDateValue" "2022-Jan-02");日期转数值
  36.       (vlax-invoke scr 'run "MyDateDiff" "d" "1949/10/1" now);两个日期之间的时间间隔数
  37.       (vlax-release-object scr)
  38.       (princ)
  39.     )
  40.   )
  41. )



 楼主| 发表于 2022-9-19 05:08:37 | 显示全部楼层
highflybird 发表于 2022-9-18 08:20
这个问题可以用脚本语言来。
如:(vlax-invoke scr 'run "MyDateAdd" "d" -3 "2022/9/18")
或者:(vlax-i ...

感谢大佬解惑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 20:04 , Processed in 0.177866 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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