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

El *_*aGa 3 c timestamp milliseconds

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

Jon*_*ler 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;
Run Code Online (Sandbox Code Playgroud)

随着gettimeofday()(正式弃用,但更广泛可用 - 例如,Mac OS X有gettimeofday()但没有clock_gettime()),你有一个struct timeval成员tv_sectv_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;
Run Code Online (Sandbox Code Playgroud)

(注意,这ftime()是旧版本POSIX的标准版,但不再是POSIX的一部分,虽然有些系统仍然会提供它的向后兼容性.它在早期版本的Unix中作为第一个亚秒级时间工具提供,但不是很早作为第7版Unix.它被添加到POSIX(单一Unix规范)以实现向后兼容性,但是clock_gettime()如果可以的gettimeofday()话,你应该使用它,如果你不能.)