D中的时间比较

时间:2011-12-24 02:46:28

标签: time d

我正在尝试在D中构建一个Pomodoro计时器应用程序。我曾经使用ruby,我想进行基本的时间比较。

我尝试使用像

这样的东西
auto startTime = Clock.currTime();

然后通过抓住当前时间进行比较并比较:

do{

// bla bla stuff
  auto nowTime = Clock.currTime();
}while(nowTime <= (startTime + dur!"minute"(25));

然而,遗漏的方法和类型错误随之而来。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

除了确实告诉您如何修复代码的CyberShadow's answer之外,我想指出这种特殊方法不是计时器的最佳方法。除了条件变量很有可能更有意义(取决于你真正在做什么)之外,Clock.currTime是一个错误的函数。

Clock.currTime使用实时时钟返回时间,而使用单调时钟,时间通常更准确。对于单调时钟以外的时钟,时间可能会受到时钟变化的影响(例如,系统时钟由NTP守护进程调整几分钟)。但是,即使调整了系统时钟,单调时钟也始终以相同的速率向前移动。所以,它对于获得时间并不是很有用,但它非常适合计时。为此,你想要做更像这样的事情:

auto endTime = Clock.currSystemTick + to!TickDuration(dur!"minutes"(25));
do
{
    //bla bla stuff
} while(Clock.currSystemTick < endTime);

因此,您最终会处理core.time.TickDuration而不是std.datetime.SysTime。只要您不需要实际的时间并且只是将其用于计时目的,那么这种方法就更好了。

答案 1 :(得分:4)

  1. 您错过了)
  2. while范围内声明的变量在while条件下不可见 - 您需要将nowTime声明移到do ... while块之外。
  3. 应该是dur!"minutes",而不是"minute"
  4. 通过这些修复,代码可以为我编译。