C语言 获取当前时间的未来时间规范



我可以使用timespec_getC11函数获取当前时间。假设我想检索当前时间的下一个毫秒的时间规范值,我应该如何编写get_due_time函数?

struct timespec get_due_time(long ms) { 
struct timespec now, due;
timespec_get(&now, TIME_UTC);
...
return due;
}
struct timespec get_due_time(long ms)
{
assert(ms >= 0);
struct timespec now, due;
timespec_get(&now, TIME_UTC);
due.tv_sec = now.tv_sec + ms / 1000;
due.tv_nsec = now.tv_nsec + (ms % 1000) * 1000000;
if (due.tv_nsec >= 1000000000)
{
due.tv_nsec -= 1000000000;
due.tv_sec++;
}
return due;
}

通过将整秒添加到当前时间的秒部分(一秒有 1000 毫秒(来处理ms的大值。 通过乘以一百万(一毫秒内的纳秒数(来处理ms值的亚秒部分。 通过从tv_nsec中减去十亿(每秒的纳秒数(并增加tv_sec部分来处理tv_nsec溢出。 假设timespec_get()返回规范化struct timespec值(因此tv_nsec在 0..999,999,999 范围内(,算术是安全的。

您可以简单地修改now并返回它,而不是创建和修改due。 不过,这不是一个大问题。

您可以创建和使用以下名称:

enum
{
MILLISECONDS_PER_SECOND = 1000,
NANOSECONDS_PER_SECOND  = 1000000000,
NANOSECONDS_PER_MILLISECOND = NANOSECONDS_PER_SECOND / MILLISECONDS_PER_SECOND
};

我不确定这是否值得。

如果您需要处理负偏移量(ms的负值(,您还有更多工作要做,在添加负量后处理负结果tv_nsec并在必要时递减tv_sec

相关内容

  • 没有找到相关文章

最新更新