|
@@ -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."
|