如何将当前日期时间作为C中的毫秒数

时间:2014-03-29 12:37:05

标签: c timestamp milliseconds

我正在尝试编写一个程序,根据系统的内部时钟生成一个随机数,这样我就不需要种子或第一个值。必须从内部时钟获取第一个值,方法是将年,月,日,小时,分钟,秒转换为毫秒,并将它们添加到当前毫秒,以获得唯一编号(时间戳)。有什么帮助在C中获取这些值吗?

3 个答案:

答案 0 :(得分:5)

您可以使用clock_gettime()gettimeofday() - 或者,如果您处于非常贫困的环境中,ftime()time()。 确保您使用足够大的数据类型来保存毫秒。

对于clock_gettime(),结果为struct timespec,其元素为tv_sectv_nsec。您使用:

#include <time.h>
#include <stdint.h>

struct timespec t;
clock_gettime(CLOCK_REALTIME, &t);
int64_t millitime = t.tv_sec * INT64_C(1000) + t.tv_nsec / 1000000;

使用gettimeofday()(已正式弃用,但可广泛使用 - 例如,Mac OS X有gettimeofday()但没有clock_gettime()),您有{{1}成员struct timevaltv_sec

tv_usec

(注意#include <sys/time.h> #include <stdint.h> struct timeval t; gettimeofday(&t, 0); int64_t millitime = t.tv_sec * INT64_C(1000) + t.tv_usec / 1000; 是旧版POSIX的标准版,但不再是POSIX的一部分,尽管有些系统仍会提供它以实现向后兼容性。它在早期版本的Unix中作为第一个子版本提供。第二次使用,但不早于第7版Unix。它被添加到POSIX(单一Unix规范)以实现向后兼容性,但如果可以的话,你应该使用ftime(),如果可以,你应该clock_gettime() #39; t)的

答案 1 :(得分:0)

标准C不能保证时间精度优于一秒。 如果您使用的是POSIX系统,请尝试the clock* functions

答案 2 :(得分:0)

如果您碰巧在Windows中执行此操作,则可以使用:

unsigned int rand = GetTickCount() % A_PRIME_NUMBER_FOR_EXAMPLE;

[编辑:强调模块适合您的情况]