(in-package :clsql-tests) ;;;; This file contains a test ensuring that our utc conversion goes the same ;;;; though UTC as it would through local-time, the values should match in each pairing ;;;; This is left as a manual test, because it requires local-time and nothing else does ;;;; (ql:quickload :local-time) (local-time:reread-timezone-repository) (defun %localtime-timestamp-offset (time) (when (time-is-utc? time) (return-from %localtime-timestamp-offset 0)) (multiple-value-bind (tusec tsec tmin thour tday tmonth tyear) (decode-time time) (multiple-value-bind (_nsec _sec _min _hour _day _month _year _day-of-week _daylight-saving-time-p offset) (local-time:decode-timestamp (local-time:encode-timestamp (* 1000 (or tusec 0)) tsec tmin thour tday tmonth tyear)) (declare (ignore _nsec _sec _min _hour _day _month _year _day-of-week _daylight-saving-time-p)) offset))) (list (let* ((clsql-sys::*default-timezone* -1) (clsql-sys::*default-timezone-is-dst?* t) (local-time:*default-timezone* (local-time:find-timezone-by-location-name "Europe/Berlin")) (ts (parse-timestring "2017-07-01T08:10:00"))) (list (multiple-value-list (clsql-sys::%universal-ts-offset ts)) (multiple-value-list (clsql-sys::%localtime-timestamp-offset ts)))) (let* ((clsql-sys::*default-timezone* -1) (clsql-sys::*default-timezone-is-dst?* nil) (local-time:*default-timezone* (local-time:find-timezone-by-location-name "Europe/Berlin")) (ts (parse-timestring "2017-12-01T08:10:00"))) (list (multiple-value-list (clsql-sys::%universal-ts-offset ts)) (multiple-value-list (clsql-sys::%localtime-timestamp-offset ts)))) (let* ((clsql-sys::*default-timezone* 5) (clsql-sys::*default-timezone-is-dst?* t) (local-time:*default-timezone* (local-time:find-timezone-by-location-name "America/New_York")) (ts (parse-timestring "2017-07-01T08:10:00"))) (list (multiple-value-list (clsql-sys::%universal-ts-offset ts)) (multiple-value-list (clsql-sys::%localtime-timestamp-offset ts)))) (let* ((clsql-sys::*default-timezone* 5) (clsql-sys::*default-timezone-is-dst?* nil) (local-time:*default-timezone* (local-time:find-timezone-by-location-name "America/New_York")) (ts (parse-timestring "2017-12-01T08:10:00"))) (list (multiple-value-list (clsql-sys::%universal-ts-offset ts)) (multiple-value-list (clsql-sys::%localtime-timestamp-offset ts)))) )