Time from timestamp?

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 30 22:03:02 PST 2015


On Friday, January 30, 2015 19:14:37 Steven Schveighoffer via Digitalmars-d-learn wrote:
> On 1/30/15 5:18 PM, Chris Williams wrote:
> > I'm attempting to print a human-readable version of a timestamp. The
> > timestamp is coming from an external service, via JSON. An example is:
> >
> > 1421865781342
> >
> > Which I know to be:
> >
> > 2015-01-21T18:43:01.342Z
> >
>
> http://dlang.org/phobos/std_datetime.html#.unixTimeToStdTime
>
> It's kind of convoluted because there is no epoch, but you can make one:
>
> import std.datetime;
> import std.stdio;
>
> void main(string[] args)
> {
>      // can't make this enum because of time zone...
>      auto epoch = SysTime(unixTimeToStdTime(0), UTC());
>      writeln(epoch + 1_421_865_781_342.msecs);
> }
>
> output:
> 2015-Jan-21 18:43:01.342Z
>
> Note the reason your code didn't work is because SysTime uses 1/1/1 as
> the epoch.

Yeah. I really should add a unixTimeToSysTime function, but when I
originally wrote std.datetime, I wasn't thinking about getting times from C
stuff and converting them to D, just the other way around (a stupid
oversight in retrospect). The functionality is there, but it's more
convoluted than it should be. And the term "std time" was stupid on my part
too, since there's nothing standard about it except that it uses midnight of
1/1/1 as the epoch like the ISO standard says (but that has nothing to do
with hnsecs). Oh well, too late now, and I still don't know what a good name
for it would have been.

I'll have to put adding unixTimeToSysTime on the list of things to do after
finish splitting std.datetime (which I started again the other day but is
going more slowly than I'd like, since I've been rather busy). I also need
to update the "Introduction to std.datetime" article so that it talks more
about stuff like that than the now defunct std.date. When Walter was dealing
with some of that recently, he thought that it should focus more on
interacting with C than std.date, which makes sense at this point (though,
since he was porting something old from std.date, it's current state was
presumably useful to him).

Too much to do, too little time...

- Jonathan M Davis



More information about the Digitalmars-d-learn mailing list