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.
  • System.TM timezone co... ceder (-) Per Cederqvist @ Pike (-) developers forum

Reply via email to