Had a sign backwards that was causing issues
authorRuss Tyndall <russ@acceleration.net>
Wed, 7 Feb 2018 21:04:50 +0000 (16:04 -0500)
committerRuss Tyndall <russ@acceleration.net>
Wed, 7 Feb 2018 21:11:49 +0000 (16:11 -0500)
 * 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
tests/test-time.lisp

index 39d9e4dc3483a70272ee06d2bdef50185556e2ea..38ad86f12f577676c2e959649a971205a0e86f0a 100644 (file)
       (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,
index b130b99d6c57d72ba538822d5a36879e74fca027..a06f1547fe14f2dacecbb633e23947860b3a1448 100644 (file)
@@ -37,7 +37,7 @@
 
 (def-dataset *cross-platform-datetest*
   (:setup (lambda () (create-table [datetest]
-                                  '(([testtime] wall-time)))))
+                                  '(([testtime] "timestamp")))))
   (:cleanup (lambda ()
              (drop-table [datetest]))))
 
         )))
   #.(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)
+
+ )
 ))
 
 
 
 
 
+