MATLAB 将 datestr 导出到 txt 文件

MATLAB exporting datestr into txt file

所以我有这个代码,

%%
%Changing from the unix epoch time to standard DDMMYY format
%Importing the data 
unix_time = [1435763099;1435763109;1435763119;1435763129]; %time of the plot

%Conversion of the epoch data
time = datestr(719529+unix_time/86400,'dd/mmm/yyyy HH:MM:SS');

而且我想将 'time' 导出到 .txt 文件或 excel 但是我无法找到一种方法来做到这一点而不导致错误的 txt 文件。

fid = fopen('time.txt','wt');
fprintf(fid, time)
fclose(fid);

我试过这个方法,但它似乎没有给我我正在寻找的正确结果,我希望结果是 unix_time 转换为 dd/mmm/yyyy HH:MM:SS 格式化并将其导出到列文本文件中。

我不想在文本文件中显示结果

01/Jul/2015 15:04:59,
01/Jul/2015 15:05:09,
01/Jul/2015 15:05:19,
01/Jul/2015 15:05:29,

我认为在这种情况下最好使用不同于 fprintf 的函数。

如果按以下方式使用,

dlmwrite 会很好地完成工作:

 dlmwrite('time.txt',time,'delimiter','');

但是,这不会在每行的末尾添加逗号。如果你想要逗号,你可以在将它们写入文件之前使用矩阵索引将它们添加到变量 time 中。

time(:,end+1):',';

上面的 fprintf 调用没有按预期运行的原因是因为 fprintf(更一般地说,MATLAB)是列优先的,这就是为什么你得到 00001111....

这是在 R2016b 中引入的 MATLAB 新 string class 的一个很好的用例。 string 数组由 fprintf 原生支持,并以预期的方式打印:

unix_time = [1435763099;1435763109;1435763119;1435763129];
time = string(datestr(719529+unix_time/86400,'dd/mmm/yyyy HH:MM:SS'));

fid = fopen('time.txt','wt');
fprintf(fid, '%s,\n', time);
fclose(fid);

打印出:

01/Jul/2015 15:04:59,
01/Jul/2015 15:05:09,
01/Jul/2015 15:05:19,
01/Jul/2015 15:05:29,

如果您使用的是不支持 string class 的旧版 MATLAB,您可以进行一些小的调整以获得 fprintf 的配合。当 运行 进入 fprintf 的列主要怪癖时,第一个倾向是 transpose 数据,这应该让我们到达我们想要的地方,对吧?

unix_time = [1435763099;1435763109;1435763119;1435763129];
time = datestr(719529+unix_time/86400,'dd/mmm/yyyy HH:MM:SS');
fprintf('%s,\n', time.')

这给了我们:

01/Jul/2015 15:04:5901/Jul/2015 15:05:0901/Jul/2015 15:05:1901/Jul/2015 15:05:29,

哎呀。它确实在技术上给了我们想要的东西,但它最终只是一行。为了解决这个问题,我们可以在转置之前将换行符 \n 和逗号附加到每一行的末尾:

unix_time = [1435763099;1435763109;1435763119;1435763129];
time = datestr(719529+unix_time/86400,'dd/mmm/yyyy HH:MM:SS');
fprintf('%s', horzcat(time, repmat(sprintf(',\n'), size(time, 1), 1)).');

打印:

01/Jul/2015 15:04:59,
01/Jul/2015 15:05:09,
01/Jul/2015 15:05:19,
01/Jul/2015 15:05:29,

耶!