[英]time.h - struct tm and milliseconds
我的日志数据来自不同来源,范围从1000到100000。 目的是按时间(快速)对数据进行排序。 我正在使用C进行原型设计,但因为看起来tm不支持毫秒,所以我陷入了困境。 我在这里想念什么吗? 有什么建议么 ?
理念:
打开文件。 通过strtok逐行解析并标记化字段以构造c
1.1将日期和时间转换为“ struct tm”。
1.2建立链表
[例]
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.