如何将MATLAB序列号数转换为日历日期?

时间:2013-12-27 16:55:07

标签: matlab calendar timestamp

这不是一个编程问题,因为它需要澄清以理解Matlab序列日期数字格式的工作方式。我正在引用Matlab序列日期编号,我想知道如何使用最简单的方法将它们转换为日历日期。那里的许多参考文献只是指导如何在Matlab中使用这些数字,但是我希望能够通过算术来理解这些数字来导出它们代表的日期而不使用Matlab (如果这是可能的话)。

根据我已经完成的研究,我确实理解Matlab时间戳本质上是自0000年1月1日以来的天数的计数,并且附加的浮点数进一步表示特定的小时,分​​钟等。然而,我不清楚它们是如何分解的。那里的参考信息不是很丰富,也不全面,我很难理解它是如何工作的。

说我有时间戳735071.64930556。任何人都可以为我提供一个公式,以便能够推导出它所代表的日历日期,或指导我完成转换过程吗?从编程的角度来看,我想要了解这一点的目的是为了最终编写一个转换器,以便能够在我正在开发的应用程序中处理这种格式。但就目前而言,我只想了解这个过程是如何运作的。

由于

2 个答案:

答案 0 :(得分:4)

使用datevecdatestr

>> datevec(735071.64930556)
ans =
  1.0e+003 *
    2.0120    0.0070    0.0210    0.0150    0.0350    0.0000

>> datestr(735071.64930556)
ans =
21-Jul-2012 15:35:00

答案 1 :(得分:2)

使您的问题有点难以回答的主要是闰年/闰秒问题。如果您希望日期值仅存在于有限的值范围内,则问题会稍微简单一些(实际上我不确定Matlab如何处理世界从Julian到Gregorian日历的“失去的日子”,例如 - 请参阅{ {3}}提示我正在谈论的内容。)

小时 - 分 - 秒部分相对容易。当你有

datevalue = 735071.64930556;

你可以计算:

rem = datevalue - floor(datevalue);
hours = floor(24*rem);
rem = 24 * rem - hours;
minutes = floor( 60 * rem );
rem = 60 * rem - minutes;
seconds = 60 * rem;

要获得年/月/日,您最好的选择是使用您选择的语言中的一些内置函数(对于许多示例,请参阅http://en.wikipedia.org/wiki/Conversion_between_Julian_and_Gregorian_calendars),或者敲出自己并创建一些查找表。如果你有每个月的第一天的日期,查找会很快;从0 CE到今天,这将只是2013 * 12个条目 - 不是一个非常大的表。这样的表可以在Matlab中创建并导出......