Work to add UTC tracking to wall-times
[clsql.git] / tests / utc-time-compare.lisp
1 (in-package :clsql-tests)
2
3 ;;;; This file contains a test ensuring that our utc conversion goes the same
4 ;;;; though UTC as it would through local-time, the values should match in each pairing
5 ;;;; This is left as a manual test, because it requires local-time and nothing else does
6 ;;;;
7
8 (ql:quickload :local-time)
9 (local-time:reread-timezone-repository)
10
11 (defun %localtime-timestamp-offset (time)
12   (when (time-is-utc? time)
13     (return-from %localtime-timestamp-offset 0))
14   (multiple-value-bind (tusec tsec tmin thour tday tmonth tyear)
15       (decode-time time)
16     (multiple-value-bind (_nsec _sec _min _hour _day _month _year
17                           _day-of-week _daylight-saving-time-p
18                           offset)
19         (local-time:decode-timestamp
20          (local-time:encode-timestamp
21           (* 1000 (or tusec 0)) tsec tmin thour tday tmonth tyear))
22       (declare (ignore _nsec _sec _min _hour _day _month _year
23                        _day-of-week _daylight-saving-time-p))
24       offset)))
25
26 (list
27  (let* ((clsql-sys::*default-timezone* -1)
28         (clsql-sys::*default-timezone-is-dst?* t)
29         (local-time:*default-timezone*
30           (local-time:find-timezone-by-location-name "Europe/Berlin"))
31         (ts (parse-timestring "2017-07-01T08:10:00")))
32    (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
33          (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
34
35  (let* ((clsql-sys::*default-timezone* -1)
36         (clsql-sys::*default-timezone-is-dst?* nil)
37         (local-time:*default-timezone*
38           (local-time:find-timezone-by-location-name "Europe/Berlin"))
39         (ts (parse-timestring "2017-12-01T08:10:00")))
40    (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
41          (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
42
43  (let* ((clsql-sys::*default-timezone* 5)
44         (clsql-sys::*default-timezone-is-dst?* t)
45         (local-time:*default-timezone*
46           (local-time:find-timezone-by-location-name "America/New_York"))
47         (ts (parse-timestring "2017-07-01T08:10:00")))
48    (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
49          (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
50
51  (let* ((clsql-sys::*default-timezone* 5)
52         (clsql-sys::*default-timezone-is-dst?* nil)
53         (local-time:*default-timezone*
54           (local-time:find-timezone-by-location-name "America/New_York"))
55         (ts (parse-timestring "2017-12-01T08:10:00")))
56    (list (multiple-value-list (clsql-sys::%universal-ts-offset ts))
57          (multiple-value-list  (clsql-sys::%localtime-timestamp-offset ts))))
58  )