为什么MATLAB中的datetime会产生奇怪的结果?

时间:2017-11-17 11:27:54

标签: matlab

我正在尝试从double数组转换datenum值。但转换导致'年'中出现奇怪的价值。

e.g。
     t(1)=23823.1076388889; d=datetime(t,'ConvertFrom','datenum'); d(1) = '22-Mar-0065 02:35:00'

我做错了什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

23823.1076388889被解释为Julian日期或Proleptic Gregorian日期,小数部分是当天经过的比例。

23823是第65年的一天。

如果要使用不同的比例,则使用加性常量。例如,要在1900年2月之后恢复Excel样式的日期,您需要添加2415019。

答案 1 :(得分:3)

MATLAB日期编号计算虚构年份0的午夜,1月1日 st 的天数(使用具有闰年的格里高利系统从今天开始向后计数)。

您有不同的偏移量,因此您只需添加:

t  = 23823.1076388889;
t0 = datenum('1950-01-01 00:00:00', 'yyyy-mm-dd HH:MM:SS');
d  = datestr(t + t0)

给出:

d =
    24-Mar-2015 02:35:00

答案 2 :(得分:2)

您必须知道'dateType'所在的日期格式(t(1)参数)。datenum格式提供自0-Jan-0000以来的天数

23,000天大约是63年,所以这解释了你的结果。

尝试此处列出的其他格式:https://se.mathworks.com/help/matlab/ref/datetime.html#inputarg_dateType