3个和时间有关的autocad系统变量
做autocad的二次开发,就免不了要跟系统变量打交道。有些功能,通过调用系统变量,实现起来就变得简便了。 有些功能,离开了系统变量,可能就无法通过autolisp/visual lisp来实现。
长时间以来,在公开资料上,无论是autocad安装文件附带的帮助文件,还是官方网站的帮助文件,能查询到的和时间相关的系统变量, 都只有两个,即cdate和date。
cdate系统变量
cdate
是只读的实数值,表示的是当前的日期和时间。
其整数部分,表示当前日期,格式为YYYYMMDD
。
其小数部分,以24时制表示当前时间,格式为HHMMSS
。
例如,2006 年二月九日下午 3:05 显示为 20060209.150500
。
date系统变量
date
也是只读的实数值,表示的是当前的日期和时间,使用的是Julian日期格式,表示自公元前 4713年1月1日12:00 a.m. (B.C.E.) 起的天数。
它的值是以天为单位的,在用date值计时的时候,用2次返回值的差,乘以86400.0即可得到以秒为单位的时间。
millisecs系统变量
尽管这个millisecs
长期不在官方资料上出现,但是,广大的开发人员早就了解了这个系统变量,应用到了二次开发当中。
在官方文件中,millisecs
首见于2018版autocad的帮助文件,是以“新引入”的系统变量的身份出现的。
那么,这个所谓的新引入的系统变量millisecs,到底是什么功能呢?
millisecs
,保存的就是操作系统自启动以来所运行的时间,单位是毫秒。根据官方文档的说法,它的值等效于windows api
GetTickCount
的返回值,操作系统重启以后,返回值就清零了,所以,millisecs的值也清零了。
用法举例
这3个系统变量,虽然都能获取当前时间,但是,差异也是很明显的,因此,用法上也是有区别的。
获取当前的日期和时间
使用cdate
值,转换为字符串以后稍加编辑即可。
虽然date
也能实现这个功能,但是要从Julian日期格式转换,没有必要弄得那么麻烦。
millisecs
则无法实现这个功能。
计时器
计时器,也就是计算两个时刻之间的时间差,这3个系统变量都可以实现这个功能。
使用cdate
值的话,需要分别计算整数部分和小数部分的差值,然后对整数和小数部分分别进行单位换算,
如此这般,才能得到时间差,比较繁琐。
使用date
值的话,差值乘以86400.0即可得到以秒为单位的时间,很便利。
使用millisecs
值的话,差值乘以0.001即可得到以秒为单位的时间,也很便利。
事实上,老手写的autolisp插件,多半是用millisecs
值实现计时器,新手则使用cdate
值更多。
按照autodesk官方文档的说法,自autocad2017开始,cdate
值不再提供毫秒级精度,
那么,在需要精确计时的情况下,就只能选择使用millisecs
值了。
文章作者 Jack Hsu
上次更新 2021-11-13
许可协议 Copyright © Jack Hsu. All Rights Reserved.