Rant: Date and Time fall short of simplicity in D
Jonathan M Davis
jmdavisProg at gmx.com
Fri Mar 29 23:06:14 PDT 2013
On Friday, March 29, 2013 22:50:16 Steven Schveighoffer wrote:
> On Fri, 29 Mar 2013 19:35:35 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
>
> wrote:
> > On Friday, March 29, 2013 10:03:31 Steven Schveighoffer wrote:
> >> 1. unixTimeToStdTime should take ulong.
> >
> > Why? You're converting a time_t, so unixToStdTime explicitly uses
> > time_t. Its
> > size is system-dependent.
>
> Because if your unix time is stored in a ulong, for whatever reason, you
> may then have to cast to call this function.
>
> time_t implicitly casts to ulong, no matter the system-defined size of
> time_t. It's also more future-proof, for dates past 2038.
>
> Is there a specific reason to disallow accepting ulong?
Because the whole point is that you're operating on time_t, which isn't ulong.
Also, specifically using an unsigned type is wrong, because time_t is signed on
some systems. So, it could be changed to long, but using long instead time_t
will break code on 32-bit systems for SysTime's toUnixTime, and I'd expect
unixTimeToStdTime or unixTimeToSysTime to use the same type as toUnixTime. And
if future-proofing is the issue, then you'll need a 64-bit system anyway,
otherwise the C stuff that you're interacting with wouldn't work correctly with
the larger time_t values.
I can definitely see an argument for just using long and then requiring people
to cast if they're really using time_t and are on a 32-bit system, but that
would break code at this point. I used time_t, because the whole point was
that you were converting to and from time_t.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list