diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 0ff87b177..6f1baadc3 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -1068,7 +1068,7 @@ as a canonical duration, i.e., using units defined in (cond ((string-match-p org-ts-regexp s) (/ (- org-columns--time - (float-time (apply #'encode-time (org-parse-time-string s)))) + (float-time (apply #'encode-time (org-parse-time-string s nil t)))) 60)) ((org-duration-p s) (org-duration-to-minutes s t)) ;skip user units (t (user-error "Invalid age: %S" s)))) diff --git a/lisp/org.el b/lisp/org.el index 191990db7..e2e56f228 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -17799,11 +17799,17 @@ day number." (list (nth 4 d) (nth 3 d) (nth 5 d)))) ((listp d) (list (nth 4 d) (nth 3 d) (nth 5 d))))) -(defun org-parse-time-string (s &optional nodefault) +(defun org-parse-time-string (s &optional nodefault zone) "Parse the standard Org time string. + This should be a lot faster than the normal `parse-time-string'. -If time is not given, defaults to 0:00. However, with optional NODEFAULT, -hour and minute fields will be nil if not given." + +If time is not given, defaults to 0:00. However, with optional +NODEFAULT, hour and minute fields will be nil if not given. + +The optional ZONE is omitted or nil for Emacs local time, t for +Universal Time, ‘wall’ for system wall clock time, or a string as +in the TZ environment variable." (cond ((string-match org-ts-regexp0 s) (list 0 (when (or (match-beginning 8) (not nodefault)) @@ -17813,9 +17819,9 @@ hour and minute fields will be nil if not given." (string-to-number (match-string 4 s)) (string-to-number (match-string 3 s)) (string-to-number (match-string 2 s)) - nil nil nil)) + nil nil zone)) ((string-match "^<[^>]+>$" s) - (decode-time (seconds-to-time (org-matcher-time s)))) + (decode-time (seconds-to-time (org-matcher-time s)) zone)) (t (error "Not a standard Org time string: %s" s)))) (defun org-timestamp-up (&optional arg) diff --git a/testing/lisp/test-org-colview.el b/testing/lisp/test-org-colview.el index f816e7b75..85c1bcfb2 100644 --- a/testing/lisp/test-org-colview.el +++ b/testing/lisp/test-org-colview.el @@ -513,7 +513,7 @@ (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>"))))) + (org-parse-time-string "<2014-03-04 Tue>" nil t))))) (org-test-with-temp-text "* H ** S1 @@ -528,11 +528,11 @@ (get-char-property (point) 'org-columns-value-modified))))) (should (equal - "705d 1h" + "705d" (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>"))))) + (org-parse-time-string "<2014-03-04 Tue>" nil t))))) (org-test-with-temp-text "* H ** S1 @@ -547,11 +547,11 @@ (get-char-property (point) 'org-columns-value-modified))))) (should (equal - "352d 12h 30min" + "352d 12h" (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>"))))) + (org-parse-time-string "<2014-03-04 Tue>" nil t))))) (org-test-with-temp-text "* H ** S1