首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以C中的毫秒为单位获取当前日期时间

如何以C中的毫秒为单位获取当前日期时间
EN

Stack Overflow用户
提问于 2014-03-29 12:37:04
回答 3查看 4.4K关注 0票数 5

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

EN

回答 3

Stack Overflow用户

发布于 2014-03-29 12:38:34

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

对于clock_gettime(),结果是一个包含tv_sectv_nsec元素的struct timespec。你会用:

代码语言:javascript
复制
#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有gettimeofday()但没有clock_gettime()),您有一个带有tv_sectv_usec成员的struct timeval

代码语言:javascript
复制
#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;

(请注意,ftime()在较早版本的POSIX中是标准的,但不再是POSIX的一部分,尽管有些系统仍然提供向后兼容性。它在Unix的早期版本中作为第一个次-秒级工具提供,但并不早于第7版Unix。为了向后兼容,它被添加到POSIX (单Unix规范)中,但是如果可以的话应该使用clock_gettime(),如果不能的话应该使用gettimeofday() )。

票数 6
EN

Stack Overflow用户

发布于 2014-03-29 12:39:09

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

票数 0
EN

Stack Overflow用户

发布于 2014-03-29 12:45:53

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

代码语言:javascript
复制
unsigned int rand = GetTickCount() % A_PRIME_NUMBER_FOR_EXAMPLE;

编辑:强调一些适合你的环境的东西

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22731173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档