使用matlab将yyyy-mm-dd hh:mm:ss.ms转换为yyyy-mm-dd hh:mm:ss

时间:2017-01-04 15:56:13

标签: arrays matlab date datetime time-series

我收到时间戳数据集,格式为yyyy-mm-dd HH:MM:SS。我想转换为2012-08-01 00:10:00.0 格式。有没有办法只使用matlab选择这种格式?

例如:

2012-08-01 00:10:00

应该是:

{{1}}

请注意,毫秒值均为零。

3 个答案:

答案 0 :(得分:4)

一般方法是使用datestr将其转换为您想要的格式。

dates = {'2012-08-01 00:10:00.1';
         '2012-08-01 00:10:00.1'};

new = datestr(dates, 'yyyy-mm-dd HH:MM:SS');
%   2012-08-01 00:10:00
%   2012-08-01 00:10:00

另一种方法是,因为你的所有毫秒都将为零(因此你不必担心舍入),你可以使用正则表达式来删除毫秒组件(小数点后的任何内容) )

new = regexprep(dates, '\..*', '')

由于您不需要执行转换为datetime对象或日期编号的中间步骤,因此可能会更高效。

答案 1 :(得分:3)

由于输入和输出格式除了毫秒之外是相同的,所以不要使用日期函数,而是使用简单的字符串操作:

% example dates
C = {'2012-08-01 00:10:00.0'
     '2013-08-02 00:11:11.0'
     '2014-08-03 00:12:22.0'
     '2015-08-04 00:13:33.0'
     '2016-08-05 00:14:44.0'};

% method 1
D = cellfun(@(x)x(1:end-2), C, 'UniformOutput', false);

% method 2 (same, but no cellfun)
D = char(C);
D = cellstr(D(:,1:end-2));

% method 3
D = regexp(C, '[^\.]*', 'match', 'once');

% method 4
D = regexprep(C, '\..*$', '');

答案 2 :(得分:2)

让我们说你需要在datetime对象中使用这些数据然后我会做这样的事情:

inp = {'2012-08-01 00:10:00.0'; '2012-08-02 04:10:00.0'}; % Some datestrins
t = datetime(inp,'InputFormat','yyyy-MM-dd HH:mm:ss.0'); % Convert to datetimes
datestr(t, 'yyyy-mm-dd HH:MM:SS') % convert back to strings

input& output格式化程序请参阅文档。我假设最后一部分总是为零。