首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >time.h - struct和毫秒

time.h - struct和毫秒
EN

Stack Overflow用户
提问于 2017-07-11 19:12:36
回答 2查看 3.2K关注 0票数 0

我有从1000到100000的日志数据,全部来自不同的来源。目的是按时间(快速)对这些数据进行排序。我用C语言进行原型设计,因为tm看起来不支持毫秒,所以我被困住了。我是不是漏掉了什么?有什么建议吗?

想法:

  1. 打开文件。通过strtok将逐行字段和标记字段解析为c结构。 1.1将日期和时间转换为"struct“。 1.2构建链接列表
  2. 基于时间的排序链接列表(不知道我会使用哪种排序算法)
  3. 输出

示例

代码语言:javascript
复制
YYYY-MM-DD,HH:MM:SS:MS , PID, TID , COMPONENT, Message 
2017-03-29,20:56:27:088, 3436,2568,COMPONENT, Message String blah blah
2017-03-29,20:56:27:089, 3436,2568,COMPONENT, Message String baaaaa
2017-03-29,20:56:27:079, 3436,2568,COMPONENT, Message String roarrr
2017-03-29,20:56:28:061, 3436,2568,COMPONENT, Message String meow
2017-03-29,20:56:25:044, 3436,2568,COMPONENT, Message String ruff ruff 
.
.
.
100000 entries 
代码语言:javascript
复制
const char T[] = "2017-03-29,20:56:27:088"; //Test String
time_t result = 0;
int year = 0, month = 0, day = 0;
int hour = 0, min = 0, sec = 0, ms = 0;

if (sscanf(T, "%4d-%2d-%2d,%2d:%2d:%2d", &year, &month, &day, &hour, &min, &sec) == 6) {
    struct tm tv = {0};
    tv.tm_year = year;
    tv.tm_mon = month;
    tv.tm_mday = day;
    tv.tm_hour = hour;
    tv.tm_min = min;
    tv.tm_sec = sec;
    //Crap, it doesn't look like tm handles milliseconds ????

    if ((result = mktime(&tv)) == (time_t)-1) {
        fprintf(stderr, "Conversion Error\n");
    }
    puts(ctime(&result));
}
else {
    fprintf(stderr, "Invalid Format\n");
}
EN

回答 2

Stack Overflow用户

发布于 2017-07-11 19:27:34

我不明白为什么您需要将这些时间戳转换为struct tm或任何其他表示形式。它们将按你想要的方式按字典顺序排列,以它们当前的字符串形式排列。所以就这么做吧。

票数 4
EN

Stack Overflow用户

发布于 2017-07-11 19:18:37

您可以将从mktime获得的结果转换为毫秒。

代码语言:javascript
复制
if ((result = mktime(&tv)) == (time_t)-1) {
    fprintf(stderr, "Conversion Error\n");
}
long long resultmilli = (result * 1000LL) + ms;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45042799

复制
相关文章

相似问题

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