1 (in-package :clsql-tests)
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
8 (ql:quickload :local-time)
9 (local-time:reread-timezone-repository)
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)
16 (multiple-value-bind (_nsec _sec _min _hour _day _month _year
17 _day-of-week _daylight-saving-time-p
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))
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))))
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))))
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))))
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))))