From b766d0c5e07e0ecd1c3b696d70a6857cb54f9a77 Mon Sep 17 00:00:00 2001 From: Russ Tyndall Date: Wed, 7 Feb 2018 16:04:50 -0500 Subject: [PATCH] Had a sign backwards that was causing issues * time-to-utc and time-to-localtime were not always round-trip safe (eg reversible) * Added tests, also made the "crossplatform" test be "crossplatform" again re ADWolf:#1408 --- sql/time.lisp | 2 +- tests/test-time.lisp | 55 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/sql/time.lisp b/sql/time.lisp index 39d9e4d..38ad86f 100644 --- a/sql/time.lisp +++ b/sql/time.lisp @@ -146,7 +146,7 @@ (declare (ignore _sec _min _hour _day _month _year _day-of-week)) (when dst? (incf tz -1)) - (values (- (* tz 60 60)) tz)))) + (values (* tz 60 60) tz)))) (defun time-to-utc (in) "Ensures that if we have a time thats not in UTC, treat it as a localtime, diff --git a/tests/test-time.lisp b/tests/test-time.lisp index b130b99..a06f154 100644 --- a/tests/test-time.lisp +++ b/tests/test-time.lisp @@ -37,7 +37,7 @@ (def-dataset *cross-platform-datetest* (:setup (lambda () (create-table [datetest] - '(([testtime] wall-time))))) + '(([testtime] "timestamp"))))) (:cleanup (lambda () (drop-table [datetest])))) @@ -487,9 +487,62 @@ ))) #.(format-time nil (parse-timestring "1800-09-09T14:37:29") :format :iso)) + + +(deftest :time/to-utc/0 + (let* ((clsql-sys::*default-timezone* 5) + (clsql-sys::*default-timezone-is-dst?* nil) + (ts (parse-timestring "2018-02-08T15:43:29-05")) + (utc-ts (time-to-utc ts)) + (lt-ts (time-to-localtime utc-ts)) + (lt-again (time-to-localtime (time-to-utc lt-ts)))) + (values + (format-time nil utc-ts :format :iso) + (format-time nil lt-ts :format :iso) + (format-time nil lt-again :format :iso))) + #.(format-time nil (parse-timestring "2018-02-08T20:43:29Z") :format :iso) + #.(format-time nil (parse-timestring "2018-02-08T15:43:29") :format :iso) + #.(format-time nil (parse-timestring "2018-02-08T15:43:29") :format :iso) + + ) + +(deftest :time/to-utc/1 + (let* ((clsql-sys::*default-timezone* 5) + (clsql-sys::*default-timezone-is-dst?* t) + (ts (parse-timestring "2018-08-08T16:43:29-04")) + (utc-ts (time-to-utc ts)) + (lt-ts (time-to-localtime utc-ts)) + (lt-again (time-to-localtime (time-to-utc lt-ts)))) + (values + (format-time nil utc-ts :format :iso) + (format-time nil lt-ts :format :iso) + (format-time nil lt-again :format :iso))) + #.(format-time nil (parse-timestring "2018-08-08T20:43:29Z") :format :iso) + #.(format-time nil (parse-timestring "2018-08-08T16:43:29") :format :iso) + #.(format-time nil (parse-timestring "2018-08-08T16:43:29") :format :iso) + + ) + +(deftest :time/to-utc/2 + (let* ((clsql-sys::*default-timezone* -1) + (clsql-sys::*default-timezone-is-dst?* nil) + (ts (parse-timestring "2018-02-08T16:43:29+01")) + (utc-ts (time-to-utc ts)) + (lt-ts (time-to-localtime utc-ts)) + (lt-again (time-to-localtime (time-to-utc lt-ts)))) + (values + (format-time nil utc-ts :format :iso) + (format-time nil lt-ts :format :iso) + (format-time nil lt-again :format :iso))) + #.(format-time nil (parse-timestring "2018-02-08T15:43:29Z") :format :iso) + #.(format-time nil (parse-timestring "2018-02-08T16:43:29") :format :iso) + #.(format-time nil (parse-timestring "2018-02-08T16:43:29") :format :iso) + + ) )) + -- 2.34.1