Browse Source

org-clock: Remove daylight saving time offset in duration

* lisp/org-clock.el (org-clock-out):
(org-clock-sum):
(org-clocktable-steps):
(org-clock-update-time-maybe): Use UTC to compute time differences.

* testing/lisp/test-org-clock.el (test-org-clock/clocktable/scope):
  Update test.
Nicolas Goaziou 3 years ago
parent
commit
112c5ba479
2 changed files with 13 additions and 11 deletions
  1. 10 8
      lisp/org-clock.el
  2. 3 3
      testing/lisp/test-org-clock.el

+ 10 - 8
lisp/org-clock.el

@@ -1587,9 +1587,9 @@ to, overriding the existing value of `org-clock-out-switch-to-state'."
 	  (insert "--")
 	  (setq te (org-insert-time-stamp (or at-time now) 'with-hm 'inactive))
 	  (setq s (- (float-time
-		      (apply #'encode-time (org-parse-time-string te)))
+		      (apply #'encode-time (org-parse-time-string te nil t)))
 		     (float-time
-		      (apply #'encode-time (org-parse-time-string ts))))
+		      (apply #'encode-time (org-parse-time-string ts nil t))))
 		h (floor (/ s 3600))
 		s (- s (* 3600 h))
 		m (floor (/ s 60))
@@ -1823,9 +1823,9 @@ PROPNAME lets you set a custom text property instead of :org-clock-minutes."
 	   (setq ts (match-string 2)
 		 te (match-string 3)
 		 ts (float-time
-		     (apply #'encode-time (org-parse-time-string ts)))
+		     (apply #'encode-time (org-parse-time-string ts nil t)))
 		 te (float-time
-		     (apply #'encode-time (org-parse-time-string te)))
+		     (apply #'encode-time (org-parse-time-string te nil t)))
 		 ts (if tstart (max ts tstart) ts)
 		 te (if tend (min te tend) te)
 		 dt (- te ts)
@@ -2701,14 +2701,16 @@ LEVEL is an integer.  Indent by two spaces per level above 1."
       (pcase-let ((`(,month ,day ,year) (calendar-gregorian-from-absolute ts)))
 	(setq ts (float-time (encode-time 0 0 0 day month year)))))
      (ts
-      (setq ts (float-time (apply #'encode-time (org-parse-time-string ts))))))
+      (setq ts (float-time
+		(apply #'encode-time (org-parse-time-string ts nil t))))))
     (cond
      ((numberp te)
       ;; Likewise for te.
       (pcase-let ((`(,month ,day ,year) (calendar-gregorian-from-absolute te)))
 	(setq te (float-time (encode-time 0 0 0 day month year)))))
      (te
-      (setq te (float-time (apply #'encode-time (org-parse-time-string te))))))
+      (setq te (float-time
+		(apply #'encode-time (org-parse-time-string te nil t))))))
     (setq tsb
 	  (if (eq step0 'week)
 	      (- ts (* 86400 (- (nth 6 (decode-time (seconds-to-time ts))) ws)))
@@ -2885,9 +2887,9 @@ Otherwise, return nil."
 	  (setq ts (match-string 1)
 		te (match-string 3))
 	  (setq s (- (float-time
-		      (apply #'encode-time (org-parse-time-string te)))
+		      (apply #'encode-time (org-parse-time-string te nil t)))
 		     (float-time
-		      (apply #'encode-time (org-parse-time-string ts))))
+		      (apply #'encode-time (org-parse-time-string ts nil t))))
 		neg (< s 0)
 		s (abs s)
 		h (floor (/ s 3600))

+ 3 - 3
testing/lisp/test-org-clock.el

@@ -347,13 +347,13 @@ contents.  The clocktable doesn't appear in the buffer."
    (equal
     "| Headline     | Time        |     |
 |--------------+-------------+-----|
-| *Total time* | *704d 9:01* | foo |
+| *Total time* | *704d 8:01* | foo |
 |--------------+-------------+-----|
-| Test         | 704d 9:01   | foo |
+| Test         | 704d 8:01   | foo |
 "
     (org-test-with-temp-text-in-file
         "* Test
-CLOCK: [2012-03-29 Thu 16:40]--[2014-03-04 Thu 00:41] => 16905:01
+CLOCK: [2012-03-29 Thu 16:40]--[2014-03-04 Thu 00:41] => 16904:01
 
 #+BEGIN: clocktable :scope file-with-archives
 #+TBLFM: $3=string(\"foo\")