【问题标题】:Why datetime in MATLAB is giving weird result?为什么 MATLAB 中的 datetime 会给出奇怪的结果?
【发布时间】:2017-11-17 11:27:54
【问题描述】:

我正在尝试从双数组转换 datenum 值。但是转换导致“年”中的奇怪值。

例如
t(1)=23823.1076388889; d=datetime(t,'ConvertFrom','datenum'); d(1) = '22-Mar-0065 02:35:00'

我做错了什么?

感谢您的帮助。

【问题讨论】:

  • 您的实际问题是什么?您是否正在尝试将秒数转换为更易读的格式?
  • 年份应该是 2015 而不是 0065。时间是公历,基本上是“自 1950-01-01 00:00:00 UTC 以来的天数”。那么,我应该怎么做才能将时间显示为 22-Mar-2015 02:35:00。
  • 在这种情况下,您必须使用 datenum 将 1950-01-01 00:00:00 转换为数值。将结果添加到您的 t(1) 中,然后进行转换

标签: matlab


【解决方案1】:

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】:

    23823.1076388889 被解释为儒略日期或 Proleptic 公历日期,小数部分是当天经过的比例。

    23823 是第 65 年中的一天。

    如果您想使用不同的比例,请使用加法常数。例如,要恢复 1900 年 2 月之后的 Excel 样式日期,您需要添加 2415019。

    【讨论】:

    • 但数据显示时间是公历格式。我尝试将其转换为 Julian,但结果是一样的。所以,我不确定这里发生了什么。此外,从技术上讲,这一年应该是 2015 年。我知道这是自 1950 年以来的第 65 年,但我需要将它放在数组中。
    • 您希望到达哪个日期?
    【解决方案3】:

    您必须知道您的t(1) 采用哪种日期格式('dateType' 参数)。datenum 格式给出自0-Jan-0000 以来的天数

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2018-03-13
      • 2021-05-11
      相关资源
      最近更新 更多