【问题标题】:Convert timestamp from excel to a matlab将时间戳从excel转换为matlab
【发布时间】:2021-08-14 14:07:50
【问题描述】:

我有一个带有时间戳列的 csv 文件。一个示例时间戳:43606.4791492245。 如果我在 Excel 中插入这个数字,它会给我一个正确的时间:5/21/2019 11:29:58 AM。 但我需要将其转换为 Matlab 日期时间对象。 我试过了:

d = datetime(43606.4791492245, 'ConvertFrom', 'posixtime')
d = 
  datetime
   01-Jan-1970 12:06:46

而且结果不正确。

您能帮我正确转换此时间戳吗? Excel 转换中发生了什么样的魔法?

【问题讨论】:

    标签: excel matlab csv datetime timestamp


    【解决方案1】:

    找到了,用'excel'格式:

    datetime(43606.4791492245, 'ConvertFrom', 'excel')
    

    返回 2019 年 5 月 21 日 11:29:58。

    显然,'excel' datenums 是给定日期和 1899 年 12 月 31 日之间的天数,您可以在 MATLAB documentation 上阅读。

    引用下面 MrFuppes 的评论以获得更好的解释:

    在 Excel 序列日期中,第 0 天是 [...] 1899-12-31。但由于 Excel 继承了 Lotus 123 的闰年“错误”(1900 年被错误地认为是闰年),因此通常使用 1899-12-30 作为零日。在序数日期 0 和 60 之间,这实际上也会给出错误的结果,但大多数时候,您不会遇到该范围内的日期。

    【讨论】:

    • 没有0-Jan-1900 ;-) 在 Excel 序列日期中,因此第 0 天是 1899-12-31。但是由于 Excel 继承了 Lotus 123 的闰年“错误”(1900 年被错误地认为是闰年),所以通常使用 1899-12-30 作为零日。在序数日期 0 和 60 之间,这实际上也会给出错误的结果,但大多数时候,您不会遇到该范围内的日期。尽管我认为 Matlab 的 datetime 已经解决了这个问题。
    • @MrFuppes 感谢您提供有趣的澄清!我会将其添加到答案中,或者随时提出修改建议。
    • 还有一个nice story by Joel Spolsky 围绕这个 Excel 日期的东西 - 没有那么多技术细节,而是一个有趣的阅读 :)
    猜你喜欢
    • 2016-12-18
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多