簡體   English   中英

time.h-結構tm和毫秒

[英]time.h - struct tm and milliseconds

我的日志數據來自不同來源,范圍從1000到100000。 目的是按時間(快速)對數據進行排序。 我正在使用C進行原型設計,但因為看起來tm不支持毫秒,所以我陷入了困境。 我在這里想念什么嗎? 有什么建議么 ?

理念:

  1. 打開文件。 通過strtok逐行解析並標記化字段以構造c

    1.1將日期和時間轉換為“ struct tm”。

    1.2建立鏈表

  2. 根據時間對鏈接列表進行排序(不知道我要使用哪種排序算法)
  3. 輸出量

[例]

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 

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");
}

我不明白為什么您需要將這些時間戳轉換為struct tm或任何其他表示形式。 他們將按照其當前的字符串形式按照您希望的方式對字典進行排序。 所以就那樣做。

您可以獲取從mktime返回的結果,並將其轉換為毫秒。

if ((result = mktime(&tv)) == (time_t)-1) {
    fprintf(stderr, "Conversion Error\n");
}
long long resultmilli = (result * 1000LL) + ms;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM