AutoLisp - 获取UTC DateTime

时间:2017-03-27 02:50:17

标签: datetime autolisp

在autolisp中,我找到了两种调用日期CDate和Date的方法。但是我需要获得UTC日期时间。我一直在搜索它的功能,但找不到任何功能。

我的参考: php pdo documentation

有没有办法获得UTC日期时间?是否可以手动减去/添加当前时间?

非常感谢你!

2 个答案:

答案 0 :(得分:0)

您可以使用vlax-create-object来调用PowerShell来执行:(Get-Date).ToUniversalTime()

答案 1 :(得分:0)

您可以使用以下功能从NIST Internet时间服务器检索UTC日期时间:

;; Internet Time  -  Lee Mac
;; Returns the date and/or UTC time as a string in the format specified.
;; Data is sourced from a NIST Internet Time Server.
;; 
;; The format argument may use the following identifiers to represent date & time quantities:
;; YYYY = 4-digit year
;; YY   = Year
;; MO   = Month
;; DD   = Day
;; HH   = Hour
;; MM   = Minutes
;; SS   = Seconds

(defun LM:internettime ( format / result rgx server xml )
    (setq server "http://time.nist.gov:13")
    (setq result
        (vl-catch-all-apply
            (function
                (lambda ( / str )
                    (setq xml (vlax-create-object "msxml2.xmlhttp.3.0"))
                    (setq rgx (vlax-create-object "vbscript.regexp"))
                    (vlax-invoke-method xml 'open "POST" server :vlax-false)
                    (vlax-invoke-method xml 'send)
                    (if (setq str (vlax-get-property xml 'responsetext))
                        (progn
                            (vlax-put-property rgx 'global     actrue)
                            (vlax-put-property rgx 'ignorecase actrue)
                            (vlax-put-property rgx 'multiline  actrue)
                            (setq str (strcat " " (itoa (jtoy (+ (atoi (substr str 2 5)) 2400000.5))) (substr str 7)))
                            (mapcar
                                (function
                                    (lambda ( a b )
                                        (vlax-put-property rgx 'pattern a)
                                        (setq format (vlax-invoke rgx 'replace format b))
                                    )
                                )
                               '("YYYY" "YY" "MO" "DD" "HH" "MM" "SS")
                               '( "$1"  "$2" "$3" "$4" "$5" "$6" "$7")
                            )
                            (vlax-put-property rgx 'pattern
                                (strcat
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:.+)\\n"
                                )
                            )
                            (vlax-invoke-method rgx 'replace str format)
                        )
                    )
                )
            )
        )
    )
    (if xml  (vlax-release-object xml))
    (if rgx  (vlax-release-object rgx))
    (if (not (vl-catch-all-error-p result)) result)
)

;; Julian Date to Calendar Year
;; Algorithm from: Meeus, Jean.  Astronomical Algorithms.

(defun jtoy ( j / a b c d )
    (setq j (fix j)
          a (fix (/ (- j 1867216.25) 36524.25))
          b (+ (- (+ j 1 a) (fix (/ a 4))) 1524)
          c (fix (/ (- b 122.1) 365.25))
          d (fix (/ (- b (fix (* 365.25 c))) 30.6001))
    )
    (fix (- c (if (< 2 (fix (if (< d 14) (1- d) (- d 13)))) 4716 4715)))
)

以下是一个例子:

_$ (LM:internettime "YYYY-MO-DD HH:MM:SS")
"2018-01-07 11:34:24"