X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=tests%2Futc-time-compare.lisp;fp=tests%2Futc-time-compare.lisp;h=215cae93acff9c5f23637d82a8dbe801a61370fc;hb=67a4ab3576b630b8d34a6476ec8c1e9dfa913800;hp=0000000000000000000000000000000000000000;hpb=ade04fc6aa18497812f74950f2b10c23fbb5bf68;p=clsql.git diff --git a/tests/utc-time-compare.lisp b/tests/utc-time-compare.lisp new file mode 100644 index 0000000..215cae9 --- /dev/null +++ b/tests/utc-time-compare.lisp @@ -0,0 +1,58 @@ +(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)))) + )