MATLAB使用readtable读取日志日期遇DATETIME格式不匹配错误如何解决
Apache日志时间提取及转时间戳解决方法
第一步:修复日期读取报错
报错的根本原因有两个:
- 你写的日期格式串没有包含日志中日期后附带的时区偏移字段(样例中
-0200部分) - 中文系统默认MATLAB区域配置为中文,无法识别
Sep这类英文月份缩写
修改后的读取代码如下:
% 读取日志中的时间字段 log_table = readtable('Log1.txt', ... 'Format','%*[^[] [%{dd/mmm/yyyy:HH:MM:SS Z}D %*[^\n]', ... 'DateTimeLocale','en_US'); % 显式指定英文区域,适配英文月份缩写 % 可选:给读出来的时间列改个更易懂的名字 log_table.Properties.VariableNames = {'log_time'};
第二步:转换为秒级时间戳
不需要用datenum,MATLAB自带的posixtime函数可以直接处理datetime类型数据,输出1970年1月1日以来的秒级Unix时间戳:
% 生成独立的时间戳数组 timestamp_arr = posixtime(log_table.log_time); % 如果需要合并到原表格,直接新增列即可 log_table.unix_timestamp = timestamp_arr;
验证结果
基于你提供的样例日志,运行后得到的时间戳结果为:
- 1632481009
- 1632483269
- 1632486201
- 1632486575
和日志中记录的时间完全对应。
内容的提问来源于stack exchange,提问作者carriagereturn
相关产品推荐
相关产品推荐

