Rant: Date and Time fall short of simplicity in D
Steven Schveighoffer
schveiguy at yahoo.com
Sat Mar 30 19:39:49 PDT 2013
On Sat, 30 Mar 2013 02:06:14 -0400, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> 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.
No, you are operating on an integer. Unix time is defined as the number
of seconds since 1/1/1970. time_t is what time() returns, there is no
requirement for unix time to ALWAYS be stored as a time_t.
> 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
toUnixTime can return time_t, which can implicitly cast to long or ulong.
It's the *from* unix time that is a problem.
I'd argue that we probably should make it return long or ulong (I think I
did that in Tango's time code), but that is something that can be done
later.
> and I'd expect
> unixTimeToStdTime or unixTimeToSysTime to use the same type as
> toUnixTime.
It should accept the type that has the most utility -- long or ulong. As
long as it accepts time_t without any loss, it does not harm anything.
> 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.
What C stuff am I interacting with? Unix Time <=> SysTime conversions are
purely D code.
It won't be very long until Unix will have to tackle this (hopefully they
don't wait until 2037). The most likely scenario is they just increase
the bits for time_t to 64. D will be more ready for that with a change to
long/ulong for unixTimeToSysTime.
-Steve
More information about the Digitalmars-d
mailing list