Hi folks,

The std.date library for D2 seems to be buggy with respect to local
timezone conversions:

    // demo.d
    import std.stdio;
    import std.date;

    void main() {
      // UTC first, then local
      writefln(toString(getUTCtime()));
      writefln(toString(UTCtoLocalTime(getUTCtime())));
    }

Compiling and running:

    $ uname -srm
    Linux 2.6.31-20-generic x86_64
    $ dmd | head -1
    Digital Mars D Compiler v2.043

    $ dmd demo.d

    $ TZ=UTC date ; TZ=EST5EDT date       # try GNU date first
    Thu Apr 15 16:31:40 UTC 2010
    Thu Apr 15 12:31:40 EDT 2010

    $ TZ=EST5EDT ./demo
    Thu Apr 15 17:32:02 GMT+0100 2010     # UTC wrong!
    Thu Apr 15 18:32:02 GMT+0100 2010     # Local wrong!

The library it gets it right on TZ=UTC, so the TZ environment variable
is clearly being considered:

    $ TZ=UTC ./demo
    Thu Apr 15 16:32:20 GMT+0000 2010
    Thu Apr 15 16:32:20 GMT+0000 2010

But of course TZ=UTC sidesteps local conversion altogether. I also
tried with TZ=EST but that gives identical results to TZ=UTC.

Can anyone help explain what's happening here? (If it matters, I
installed the i386 .deb package on my x86_64 machine; otherwise I
think this is a typical installation.)

Thanks,
Graham

Reply via email to