You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含/不含小数秒的字符串数组转换为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:12:21