time difference - beautify my code
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Jul 2 12:42:57 PDT 2015
On Thursday, 2 July 2015 at 19:03:49 UTC, dd0s wrote:
> i got a date t described in seconds from 1.1.1970,
I.e., you have a unix timestamp.
> and i want to check if the current time is further than 12
> hours from the given time t. the following code works but it's
> super ugly =S
>
> please give me some ideas how to make this code nicer :)
>
> private static bool sessionIsCurrent(long t)
> {
> DateTime dateTime = DateTime(1970, 1, 1) +
> dur!"msecs"(t*1000);
dur!"msecs"(t*1000) -> dur!"seconds(t) -> t.seconds
Better yet (`to` from std.conv):
auto dateTime = SysTime(unixTimeToStdTime(t)).to!DateTime;
Or just go with SysTime instead of DateTime:
auto dateTime = SysTime(unixTimeToStdTime(t));
> DateTime curTime = DateTime() +
> dur!"hnsecs"(Clock.currStdTime());
Like above, use `to` to convert from SysTime to DateTime:
auto curTime = Clock.currTime.to!DateTime;
or just use a SysTime:
SysTime curTime = Clock.currTime;
> return (curTime - dateTime) < dur!"msecs"(1000*60*60*12);
Like above, dur!"msecs"(1000*60*60*12) -> dur!"seconds"(60*60*12)
-> dur!"minutes"(60*12) -> dur!"hours"(12) -> 12.hours
> }
Putting it all together, removing the now pointless variable
curTime, adding a pinch of immutable for the taste:
private static bool sessionIsCurrent(long t)
{
immutable dateTime = SysTime(unixTimeToStdTime(t));
return (Clock.currTime - dateTime) < 12.hours;
}
Final thoughts:
You may want to check that t is not in the future.
I'm not 100% sure if switching from DateTime to SysTime fixes a
bug, introduces a bug, or doesn't make any difference. As far as
I can tell, it doesn't change anything, because you're not
dealing with different time zones.
More information about the Digitalmars-d-learn
mailing list