(org-table-time-string-to-seconds): also match negative time values.
authorBastien Guerry <bzg@altern.org>
Sun, 24 Jul 2011 16:32:51 +0000 (18:32 +0200)
committerBastien Guerry <bzg@altern.org>
Sun, 24 Jul 2011 16:32:51 +0000 (18:32 +0200)
lisp/org-table.el

index af1d884..7a24733 100644 (file)
@@ -3207,20 +3207,26 @@ For example:  28 -> AB."
 
 (defun org-table-time-string-to-seconds (s)
   "Convert a time string into numerical duration in seconds.
-S is a string matching either HH:MM:SS or HH:MM."
+S must be a string matching either -?HH:MM:SS or -?HH:MM."
   (cond
    ((and (stringp s)
-        (string-match "\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)" s))
-    (let ((hour (string-to-number (match-string 1 s)))
-         (min (string-to-number (match-string 2 s)))
-         (sec (string-to-number (match-string 3 s))))
-      (+ (* hour 3600) (* min 60) sec)))
+        (string-match "\\(-?\\)\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\)" s))
+    (let ((minus (< 0 (length (match-string 1 s))))
+         (hour (string-to-number (match-string 2 s)))
+         (min (string-to-number (match-string 3 s)))
+         (sec (string-to-number (match-string 4 s))))
+      (if minus
+         (- (+ (* hour 3600) (* min 60) sec))
+       (+ (* hour 3600) (* min 60) sec))))
    ((and (stringp s)
         (not (string-match org-ts-regexp-both s))
-        (string-match "\\([0-9]+\\):\\([0-9]+\\)" s))
-    (let ((hour (string-to-number (match-string 1 s)))
-         (min (string-to-number (match-string 2 s))))
-      (+ (* hour 3600) (* min 60))))))
+        (string-match "\\(-?\\)\\([0-9]+\\):\\([0-9]+\\)" s))
+    (let ((minus (< 0 (length (match-string 1 s))))
+         (hour (string-to-number (match-string 2 s)))
+         (min (string-to-number (match-string 3 s))))
+      (if minus
+         (- (+ (* hour 3600) (* min 60)))
+       (+ (* hour 3600) (* min 60)))))))
 
 (defun org-table-time-seconds-to-string (secs)
   "Convert a number of seconds to a time string."