如何将含/不含小数秒的字符串数组转换为datetime数组?
解决MATLAB中混合精度日期字符串转datetime的问题
针对你遇到的混合格式日期字符串(部分带不同精度小数秒、部分不带)转datetime数组的问题,有两种针对性的解决方案:
1. 兼容带/不带小数秒的格式转换(保留小数秒)
MATLAB的datetime支持用括号(...)标记格式中的可选部分,你可以将小数秒部分设为可选,同时用SSS匹配1-3位的小数秒(覆盖不同精度的情况)。
代码示例:
my_date_strings{1} = '2022-01-15T14:04:58.23Z'; my_date_strings{2} = '2022-01-15T14:19:28Z'; my_date_strings{3} = '2022-01-08T09:43:24.702Z'; % 兼容所有格式的InputFormat设置 my_datetime = datetime(my_date_strings, 'InputFormat', "yyyy-MM-dd'T'HH:mm:ss(.SSS)'Z'");
这里(.SSS)表示小数秒部分是可选的,不管字符串有没有这部分,datetime都能正确解析,且会保留原有的小数秒精度。
2. 忽略所有小数秒(只保留到秒级)
如果你的需求是完全忽略小数秒,有两种更直接的方式:
方法一:利用IgnoreExtraCharacters参数
指定只解析到秒的格式,然后开启忽略额外字符的选项,这样所有字符串末尾的小数秒会被自动忽略:
my_datetime_no_ms = datetime(my_date_strings, 'InputFormat', "yyyy-MM-dd'T'HH:mm:ss'Z'", 'IgnoreExtraCharacters', true);
方法二:转换后截断小数秒
先按兼容格式转换,再通过dateshift或直接修改Second属性截断小数部分:
% 先兼容转换 my_datetime = datetime(my_date_strings, 'InputFormat', "yyyy-MM-dd'T'HH:mm:ss(.SSS)'Z'"); % 截断到秒的起始时刻 my_datetime_no_ms = dateshift(my_datetime, 'start', 'second'); % 或者直接取秒的整数部分 my_datetime_no_ms.Second = floor(my_datetime_no_ms.Second);
内容的提问来源于stack exchange,提问作者teeeeee
相关产品推荐
相关产品推荐

