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 7 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 "--")
 	  (insert "--")
 	  (setq te (org-insert-time-stamp (or at-time now) 'with-hm 'inactive))
 	  (setq te (org-insert-time-stamp (or at-time now) 'with-hm 'inactive))
 	  (setq s (- (float-time
 	  (setq s (- (float-time
-		      (apply #'encode-time (org-parse-time-string te)))
+		      (apply #'encode-time (org-parse-time-string te nil t)))
 		     (float-time
 		     (float-time
-		      (apply #'encode-time (org-parse-time-string ts))))
+		      (apply #'encode-time (org-parse-time-string ts nil t))))
 		h (floor (/ s 3600))
 		h (floor (/ s 3600))
 		s (- s (* 3600 h))
 		s (- s (* 3600 h))
 		m (floor (/ s 60))
 		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)
 	   (setq ts (match-string 2)
 		 te (match-string 3)
 		 te (match-string 3)
 		 ts (float-time
 		 ts (float-time
-		     (apply #'encode-time (org-parse-time-string ts)))
+		     (apply #'encode-time (org-parse-time-string ts nil t)))
 		 te (float-time
 		 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)
 		 ts (if tstart (max ts tstart) ts)
 		 te (if tend (min te tend) te)
 		 te (if tend (min te tend) te)
 		 dt (- te ts)
 		 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)))
       (pcase-let ((`(,month ,day ,year) (calendar-gregorian-from-absolute ts)))
 	(setq ts (float-time (encode-time 0 0 0 day month year)))))
 	(setq ts (float-time (encode-time 0 0 0 day month year)))))
      (ts
      (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
     (cond
      ((numberp te)
      ((numberp te)
       ;; Likewise for te.
       ;; Likewise for te.
       (pcase-let ((`(,month ,day ,year) (calendar-gregorian-from-absolute te)))
       (pcase-let ((`(,month ,day ,year) (calendar-gregorian-from-absolute te)))
 	(setq te (float-time (encode-time 0 0 0 day month year)))))
 	(setq te (float-time (encode-time 0 0 0 day month year)))))
      (te
      (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
     (setq tsb
 	  (if (eq step0 'week)
 	  (if (eq step0 'week)
 	      (- ts (* 86400 (- (nth 6 (decode-time (seconds-to-time ts))) ws)))
 	      (- ts (* 86400 (- (nth 6 (decode-time (seconds-to-time ts))) ws)))
@@ -2885,9 +2887,9 @@ Otherwise, return nil."
 	  (setq ts (match-string 1)
 	  (setq ts (match-string 1)
 		te (match-string 3))
 		te (match-string 3))
 	  (setq s (- (float-time
 	  (setq s (- (float-time
-		      (apply #'encode-time (org-parse-time-string te)))
+		      (apply #'encode-time (org-parse-time-string te nil t)))
 		     (float-time
 		     (float-time
-		      (apply #'encode-time (org-parse-time-string ts))))
+		      (apply #'encode-time (org-parse-time-string ts nil t))))
 		neg (< s 0)
 		neg (< s 0)
 		s (abs s)
 		s (abs s)
 		h (floor (/ s 3600))
 		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
    (equal
     "| Headline     | Time        |     |
     "| 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
     (org-test-with-temp-text-in-file
         "* Test
         "* 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
 #+BEGIN: clocktable :scope file-with-archives
 #+TBLFM: $3=string(\"foo\")
 #+TBLFM: $3=string(\"foo\")