【问题标题】:Python datetime to Matlab datenumPython datetime 到 Matlab datenum
【发布时间】:2012-02-22 17:00:30
【问题描述】:

如何将 Python datetime 转换为 Matlab datetnum

【问题讨论】:

  • 你的意思是把一种语言的对象转换成另一种语言的对象吗?如果是这样,您使用的是什么接口(PyMat?)或者您的意思是如何以特定格式打印出日期时间对象?
  • @DavidRobinson - 不,我的意思是 datenum 的文本表示,Matlab 知道如何阅读。像732399.65465 这样的东西,左边是自 1/1/1(或 1/1/0?!)以来的公历,右边是一天的分数

标签: python matlab datetime


【解决方案1】:

要将 datetime 序列化为字符串,可以在 Python 端使用 strftime:

import datetime
d = datetime.datetime.now()
print (d.strftime("%d-%b-%Y %H:%M:%S"))

根据MatLab docs datenum 知道如何解析它。

【讨论】:

    【解决方案2】:

    基于 bavaza 的回答 - 现在包括微秒:

    def datetime2matlabdn(dt):
       mdn = dt + timedelta(days = 366)
       frac_seconds = (dt-datetime.datetime(dt.year,dt.month,dt.day,0,0,0)).seconds / (24.0 * 60.0 * 60.0)
       frac_microseconds = dt.microsecond / (24.0 * 60.0 * 60.0 * 1000000.0)
       return mdn.toordinal() + frac_seconds + frac_microseconds
    

    【讨论】:

      【解决方案3】:

      逆转 here 所做的事情,我得到了:

      def datetime2matlabdn(dt):
         ord = dt.toordinal()
         mdn = dt + timedelta(days = 366)
         frac = (dt-datetime(dt.year,dt.month,dt.day,0,0,0)).seconds / (24.0 * 60.0 * 60.0)
         return mdn.toordinal() + frac
      

      也应该使用timedelta.microseconds

      在空闲状态:

      n = datetime.now()

      datetime.datetime(2012, 2, 13, 6, 56, 2, 619000)

      datetime2matlabdn(n)

      734912.28891203704

      在 Matlab 中:

      >> datestr(734912.28891203704)

      ans = 2012 年 2 月 13 日 06:56:02

      【讨论】:

      • +1 稍微偏离主题,但我必须在我的旧答案中在 MATLAB datenum 和 C# System.DateTime 之间进行类似的转换。除了内部使用的不同单位外,参考时间点也相差了 366 天:stackoverflow.com/a/7558811/97160
      • 实际上datestr(734912.28891203704, 'mmmm dd, yyyy HH:MM:SS.FFF AM') 产生February 13, 2012 6:56:02.000 AM 所以它不保留毫秒\微秒信息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多