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.


Reply via email to