明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4344|回复: 18

又有一个问题

  [复制链接]
发表于 2003-6-8 22:15 | 显示全部楼层 |阅读模式
VisualLisp中的时间是怎样记录的
我读取AutoCAD的DATE这个系统变量的时候,出现一窜奇怪的数字,这是怎么一回事
发表于 2003-6-9 08:35 | 显示全部楼层

返回值的小数部分表示时间,如下得到当前时间

(defun c:gettime(/ stime h m s)
  (setq stime (getvar"date"))
  (setq stime (* 86400.0 (- stime (fix stime))))
  (setq h (fix (/ stime 3600)))
  (setq m (fix (/ (- stime (* h 3600)) 60)))
  (setq s (fix (- stime (* m 60) (* h 3600))))
  (princ (strcat "现在时间为:" (rtos h) ":" (rtos m) ":" (rtos s)))
  (princ)
  )
 楼主| 发表于 2003-6-9 09:12 | 显示全部楼层

能得到日期吗

发表于 2003-6-9 10:01 | 显示全部楼层

(DEFUN setDATE ()

(DEFUN setDATE ()
  (SETQ TXT1 (rtos (GETVAR "CDATE")))
  (SETQ TXT1 (SUBSTR TXT1 1 8))
  (SETQ        #T1  (SUBSTR TXT1 1 4)
        #T2  (SUBSTR TXT1 5 2)
        #T3  (SUBSTR TXT1 7 2)
        TXT1 (STRCAT "---------"           #T1              "年-"
                     #T2        "月-"           #T3              "日"
                     "---------"
                    )
  )
  (setq        #t1 nil
        #t2 nil
        #t3 nil
  )
(setq txt1 nil)
)
发表于 2003-6-9 11:19 | 显示全部楼层

这个参数返回的是儒略日,具体我也没弄很清楚。下面是我从一个MATLAB转换过来的。用

这个参数返回的是儒略日,具体我也没弄很清楚。下面是我从一个MATLAB转换过来的。用前生的可能比较方便些[br](defun ju(j / BC j0 dd n1 n2 n3 year0 year month day round ceil)
  (defun round(num1 / b)
    (setq b (fix num1))
    (if (> (- num1 b) 0.5)
      (setq b (1+ b))
      b)
  )
  (defun ceil(num / b)
    (setq b (fix num))
    (1+ b)
  )
  (if (< j 1721423.5)
    (setq BC 1)
    (setq BC 0)
  )
  (if (< j 2299160.5)
    (progn
      (setq j0 (fix (+ j 0.5)))
      (setq dd (- (+ j 0.5) j0))
    )
    (progn
      (setq n1 (+ (fix (/ (- j 2342031.5) 36524.25 4)) 1));  %1700.3.1.0
      (setq n2 (+ (fix (/ (- j 2378555.5) 36524.25 4)) 1)); %1800.3.1.0
      (setq n3 (+ (fix (/ (- j 2415079.5) 36524.25 4)) 1));  %1900.3.1.0
      (setq j0 (+ n1 n2 n3 j 10))
      (setq dd (- (+ j0 0.5) (fix (+ j0 0.5))))
      (setq j0 (fix (+ j0 0.5)))
    )
  )
  (setq j0 (+ j0 32083))
  (setq year0 (ceil (- (/ j0 365.25) 1)))
  (setq year (- year0 4800))
  (setq day (- j0 (fix (* year0 365.25))))
  (setq month (+ (fix (/ (- day 0.6) 30.6)) 3))
  (setq day (- day (round (* (- month 3) 30.6))))
  (if (> month 12)
    (progn
      (setq month (- month 12))
      (setq year (1+ year))
    )
  )
  (setq year (- year BC))
  (princ "今天是:")
  (princ year)
  (princ "年")
  (princ month)
  (princ "月")
  (princ day)
  (princ "日")
  (princ)
)
 楼主| 发表于 2003-6-9 12:21 | 显示全部楼层

谢谢大家,我的问题已经解决了,下午把论文交了就可以好好的睡上一觉了

 楼主| 发表于 2003-6-9 14:33 | 显示全部楼层

我飞兄,你的程序我好象有点看不懂

30.6,365.23我基本上还能猜得出是什么,但是36524.25,32083之类的我实在不明白是什么
发表于 2003-6-9 14:36 | 显示全部楼层

我也说了没怎么弄懂,是MATLAB程序直接转换过来的。你到网上查查儒略日吧,

发表于 2003-6-9 20:26 | 显示全部楼层

如果在VBA中,则很简单

Sub dd()
Debug.Print ThisDrawing.GetVariable("date")
Debug.Print ConvertJulianDate(ThisDrawing.GetVariable("DATE"))
End Sub
Public Function ConvertJulianDate(julianDate As Double) As Date
    ConvertJulianDate = julianDate - 2415019
End Function
发表于 2003-6-12 18:02 | 显示全部楼层

here

参考一下ExpressTools中的julian.lsp,很有帮助的
当然简单一点的可以用DODLib中的相关函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 13:00 , Processed in 0.346458 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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