djunhua 发表于 2003-6-8 22:15:00

又有一个问题

VisualLisp中的时间是怎样记录的
我读取AutoCAD的DATE这个系统变量的时候,出现一窜奇怪的数字,这是怎么一回事

meflying 发表于 2003-6-9 08:35:00

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

(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)
)

djunhua 发表于 2003-6-9 09:12:00

能得到日期吗

前生 发表于 2003-6-9 10:01:00

(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)
)

meflying 发表于 2003-6-9 11:19:00

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

这个参数返回的是儒略日,具体我也没弄很清楚。下面是我从一个MATLAB转换过来的。用前生的可能比较方便些(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)
)

djunhua 发表于 2003-6-9 12:21:00

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

djunhua 发表于 2003-6-9 14:33:00

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

30.6,365.23我基本上还能猜得出是什么,但是36524.25,32083之类的我实在不明白是什么

meflying 发表于 2003-6-9 14:36:00

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

mccad 发表于 2003-6-9 20:26:00

如果在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

e2002 发表于 2003-6-12 18:02:00

here

参考一下ExpressTools中的julian.lsp,很有帮助的
当然简单一点的可以用DODLib中的相关函数
页: [1] 2
查看完整版本: 又有一个问题