首页 文章

时间戳转换为秒

提问于
浏览
1

我有时间戳7.351173057570145e 05,应该代表'05 -Sep-2012 14:20:17' . 不幸的是,我不知道那是什么时间格式 .

如果我在Matlab中使用timestr(),我会得到'05 -Sep-2012 07:20:17' . 显然我的时间是7个小时(所有文件一致) . 我试图在时间戳上添加7 * 3600秒,因为我认为这是从1970年开始的几秒钟,但这是错误的 . 如果我减去时间,我会得到0.2915的差异 . 这意味着7小时表示为0.2915 . 我不明白这是如何工作的 .

  • 这是什么时间格式?

  • 有没有方法可以添加x小时?

  • 有没有一种方法可以将其转换为unix时间(in-或不包括ms)?

谢谢你的帮助 .

3 回答

  • 2

    timestr的文档提到它期望 dateenum 返回的格式:

    TS = TIMESTR(D)将D,序列日期编号(由DATENUM返回)转换为字符串TS,格式为HH:MM:SS.SSSS .

    dateenum返回自0000年1月0日以来的天数:

    datenum函数创建一个数字数组,表示每个时间点为从0000年1月0日起的天数 .

    因此,如果你的偏移是7小时,差异应该是7/24,这确实是0.2917,正如L. Scott Johnson所建议的那样 .

    从2014b开始,您可以使用datetime来操作日期时间:

    v = 7.351173057570145e+05;
    
    d = datetime(v, 'ConvertFrom', 'datenum');
    d.Hour = d.Hour + 7; % correct for the offset
    d_posix = posixtime(d); % converts to posix
    
  • 1

    您可以先将date number(表示时间作为从0000年1月0日开始的天数)转换为datetime对象,以使其更容易使用:

    >> num = 7.351173057570145e+05;
    >> dt = datetime(num, 'ConvertFrom', 'datenum')
    dt = 
      datetime
       05-Sep-2012 07:20:17
    

    然后,您可以使用hours函数轻松修改它,像这样添加7个小时:

    >> dt = dt+hours(7)
    dt = 
      datetime
       05-Sep-2012 14:20:17
    

    然后,您可以使用函数posixtime将其转换为UNIX time(即自00:00:00 1-Jan-1970 UTC(通用协调时间)起经过的秒数,包括小数秒,忽略闰秒):

    >> format long
    >> pt = posixtime(dt)
    pt =
         1.346854817406057e+09
    

    NOTE: 您的时间戳与您的预期相差7小时的事实可能是时区问题,如a comment by Peter中所述 . 您可以通过在转换日期编号时将一些额外参数传递给 datetime 来解决此问题 . 具体来说,您应该查看'TimeZone'参数 .

  • 3

    快速回答你的问题:

    • 就像@gnovice指出的格式'datenum',这是自0-Jan-0000以来的天数

    • 只需添加到您的号码x / 24

    • 你可以将它转移到正常时间,然后再回到unix时间 .

相关问题