System.TM timezone confusion
From LysLysKOM 26017901:
26017901 2023-10-12 17:13 /39 rader/ ceder (-) Per Cederqvist
Mottagare: Pike (-) developers forum <21425>
Ärende: System.TM timezone confusion
------------------------------------------------------------
System.TM does not work as advertised. The documentation says that the timezone will be UTC when you supply a number to the constructor, but that does not appear to be the case. Note how the timezone is CEST no matter how I initialize the TM object, but the reported hours differ:
$ pike
Pike v9.0 release 1 running Hilfe v3.5 (Incremental Pike Frontend)
> mixed t = System.TM(1697121800);
> t;
(1) Result: System.TM(Thu Oct 12 15:43:20 2023 CEST)
> t->gmtime(1697121800);
(2) Result: 1
> t;
(3) Result: System.TM(Thu Oct 12 15:43:20 2023 CEST)
> t->localtime(1697121800);
(4) Result: 1
> t;
(5) Result: System.TM(Thu Oct 12 16:43:20 2023 CEST)
The result (5) makes sense: it matches what I would expect. But the hour should be set to 14, not 15:
> mixed c = Calendar.ISO.Second(1697121800);
> c->set_timezone("UTC");
> c;
(5) Result: Second(Thu 12 Oct 2023 16:43:20 CEST)
> mixed u = c->set_timezone("UTC");
> u;
(6) Result: Second(Thu 12 Oct 2023 14:43:20 UTC)
This also agrees with my private utility for converting a time_t value to the local timezone and UTC (this one is written in Python):
$ time_t2date 1697121800
2023-10-12 16:43:20 CEST
2023-10-12 14:43:20 GMT
Tested on the current master, and a few older Pike versions.
(26017901) /ceder (-) Per Cederqvist/---------------