我一直在搜索超过一个小时,但我似乎无法找到解决方案!
我正在寻找一个函数,它给我一个与Windows上的GetLocalTime类似的结构。对我来说重要的是这个结构有小时,分钟,秒和毫秒。
localtime()
不包括毫秒,因此我无法使用它!
我会使用标准库或另一个非常小的库来解决这个问题,因为我正在使用Raspberry Pi并且不能使用像boost这样的大型库!
答案 0 :(得分:2)
如上所述,没有直接的等价物。如果您可以使用C ++ 11,<chrono>
标头允许获得相同的结果,但不能在单个调用中。您可以使用high_resolution_clock
以毫秒为单位获取当前的Unix时间,然后您可以获得localtime
C函数来获取没有毫秒的时间,并使用当前的Unix时间以毫秒为单位来查找毫秒计数。看起来你必须编写自己的GetLocalTime
实现,但是使用C ++ 11它不会很复杂。
答案 1 :(得分:1)
GetLocalTime
不是常用的Linux功能。
阅读time(7),您可能需要clock_gettime(2),或者(由Joachim Pileborg评论),旧的gettimeofday(2)
如果您需要一些struct
给出所有小时,分钟,秒,毫秒,您必须使用localtime(3)自行编码并明确计算毫秒部分。
类似下面的代码就是用毫秒打印时间
struct timespec ts = {0,0};
struct tm tm = {};
char timbuf[64];
if (clock_gettime(CLOCK_REALTIME, &ts))
{ perror("clock_gettime"), exit(EXIT_FAILURE);};
time_t tim = ts.tv_sec;
if (localtime(&tim, &tm))
{ perror("localtime"), exit(EXIT_FAILURE);};
if (strftime(timbuf, sizeof(timbuf), "%D %T", &tm))
{ perror("strftime"), exit(EXIT_FAILURE);};
printf("%s.%03d\n", timbuf, (int)(ts.tv_nsec/1000000));
答案 2 :(得分:1)
您可以使用以下组合:
clock_gettime(CLOCK_REALTIME)
;返回本地时间,最多毫秒(当然受实际时钟分辨率的限制);不关心本地时区信息,返回UTC时间。只需使用毫秒信息(来自tv_nsec
字段)。 time()
;返回本地时间,直到秒 - 无毫秒 - 也是UTC时间。 time()
结果(time_t
)很容易转换为最终格式。
然后使用localtime_r()
转换time()结果;这设置了一个非常类似于Windows SYSTEMTIME
的结构;结果是第二个,并考虑到当地时区信息。
clock_gettime()
结果设置毫秒字段。 这些例程是可记录的,不是已弃用的,可移植的
您可能需要调用tzset()
一次(这会设置时区信息 - 一个C全局变量 - 来自操作系统环境 - 可能是一个繁重的操作)。