搬运CAD扩展工具里的日期函数
本帖最后由 dokey 于 2022-10-18 20:07 编辑CAD扩展工具里几个有关日期转换的函数
;|
CTOJ将日历日期和时间转换为公历日期;函数语法:(ctoj<年><月><日><小时><分><秒/分数>);
输入:作为参数列表的日历日期;样例:(ctoj 1957 10 4 19 26 24);启动 Sputnik 1;返回:公历日期/分数,与 DATE 系统变量一样
DTOJ将 AutoCAD 日历日期/时间转换为公历日期;函数语法:(dtoj<日历日期>);
输入:实数 YYYYMMDD<.HHMMSSmsec>,类似于 CDATE setvar。返回:公历日期/分数,与 DATE 系统变量一样
JTOC将公历日期转换为日历日期列表;函数语法:(jtoc<公历日期>);
输入:实数<公历日期>。<分数>,类似于 DATE setvar;返回:日历日期/时间列表:(<年><月><日><小时><分><秒/分数>)
JTOD 将公历日期转换为 AutoCAD 日历日期/时间;函数语法:(jtod<公历日期>)
输入:实数<公历日期>。<分数>,类似于 DATE setvar;返回:日历日期/时间,与 CDATEsystem 系统变量一样
JTOW为给定的公历日期确定星期几;函数语法:(jtow<公历日期>);
输入:实数<公历日期>。<分数>,类似于 DATE 系统变量;返回:整数星期几,0 = 星期日,1 = 星期一,6 = 星期六
|;
;;----------------------------------------------------------------------------
;;; (CTOJ <year> <month> <day> <hour> <minute> <second/fraction>)
(defun ctoj (yr m d hh mm ss / y a b)
(setq y yr)
(if (<= m 2)
(setq y (1- y)
m (+ m 12)
)
)
(if (or (< yr 1582)
(and (= yr 1582) (or (< m 10) (and (= m 10) (< d 5)))))
(setq b 0) ; Julian calendar
(setq a (fix (/ y 100)) ; Gregorian calendar
b (+ (- 2 a) (fix (/ a 4)))
)
)
(+ (fix (+ (* 365.25 (+ y 4716)) (fix (* 30.6001 (+ m 1)))))
d b -1524.0 (/ (+ (* (+ (* hh 60) mm) 60) ss) (* 24.0 60 60)))
)
;;;----------------------------------------------------------------------------
;;; (DTOJ <calendar date>)--convert calendar date/time to Julian
(defun dtoj (cdate / c f yr ys m d)
(setq ys (if (< cdate 0) -1 1) ; Sign on year
c (fix (abs cdate)) ; Date in unsigned digits
yr (* (/ c 10000) ys) ; Get year
m (rem (/ c 100) 100) ; Get month
d (rem c 100) ; Get day
f (rem (abs cdate) 1) ; Fraction of day
)
(ctoj yr m d (fix (+ (* f 100) 0.1))
(rem (fix (+ (* f 10000) 0.1)) 100)
(+ (rem (fix (+ (* f 1000000) 0.1)) 100)
(/ (rem (fix (+ (* f 1000000000) 0.1)) 1000) 1000.0)))
)
;;;----------------------------------------------------------------------------
;;; (JTOC <Julian date>)--convert Julian date/time to calendar date list
(defun jtoc (td / time a b c d e alpha z m hh mm)
(setq time (* 86400.0 (- td (setq z (fix td)))))
(if (< z 2299161)
(setq a z) ; Julian calendar
(setq alpha (fix (/ (- z 1867216.25) 36524.25)) ; Gregorian calendar
a (- (+ z 1 alpha) (fix (/ alpha 4)))
)
)
(setq b (+ a 1524)
c (fix (/ (- b 122.1) 365.25))
d (fix (* 365.25 c))
e (fix (/ (- b d) 30.6001))
)
(setq m (fix (if (< e 14) (1- e) (- e 13))))
; Determine the clock time from the fraction of a day
(setq hh (fix (/ time 3600.0))
time (- time (* hh 3600.0))
mm (fix (/ time 60.0))
)
; Return calendar date as list
(list (fix (- c (if (> m 2) 4716 4715))) m (fix (- b d (fix (* 30.6001 e))))
hh mm
(- time (* mm 60))
)
)
;;;----------------------------------------------------------------------------
;;; (JTOD <Julian date>)--convert Julian date/time to calendar
(defun jtod (td / j)
(setq j (jtoc td))
; Return calendar date in form YYYYMMDD.HHMMSSmsec
(* (+ (* (abs (car j)) 10000) ; year
(* (cadr j) 100) ; month
(caddr j) ; day
(/ (cadddr j) 100.0) ; hour
(/ (nth 4 j) 10000.0) ; minute
(/ (nth 5 j) 1000000.0) ; seconds, milliseconds
)
(if (< (car j) 0) -1 1) ; apply sign to year
)
)
;;;----------------------------------------------------------------------------
;;; (JTOW <Julian date>)--Convert a Julian date to day of week
(defun jtow (j)
(fix (rem (1+ j) 7))
)
感谢分享好用的日期函数
页:
[1]