如何在Matlab中使用Unix时间戳?

rob*_*ess 15 matlab unix-timestamp

我有一些带有Unix时间戳的数据文件(在这种情况下,自1970年1月1日00:00 00:00以来的毫秒数).我想在Matlab中将这些转换为人性化的日期/时间字符串(例如31-Aug-2012 11:36:24).有没有一种简单的方法在Matlab中执行此操作,或者我最好使用外部库(例如java.text.SimpleDateFormat)?

Rod*_*uis 31

怎么样

date = datestr(unix_time/86400 + datenum(1970,1,1))
Run Code Online (Sandbox Code Playgroud)

如果unix_time以秒为单位给出,unix_time/86400将给出自1970年1月1日以来的天数.加上Matlab datenum(datenum(0000,1,1) == 1)使用的偏移量,你有自0000年1月1日以来的天数.这可以很容易地转换为人类- Matlab的可读表格datestr.

如果你有毫秒,只需使用

date = datestr(unix_time/86400/1000 + datenum(1970,1,1))
Run Code Online (Sandbox Code Playgroud)

包含在功能中,这些将是

function dn = unixtime_to_datenum( unix_time )
    dn = unix_time/86400 + 719529;         %# == datenum(1970,1,1)
end

function dn = unixtime_in_ms_to_datenum( unix_time_ms )
    dn = unix_time_ms/86400000 + 719529;   %# == datenum(1970,1,1)
end

datestr( unixtime_to_datenum( unix_time ) )
Run Code Online (Sandbox Code Playgroud)

  • @robguinness确实应该有一个IEEE标准时间系统,以及每种编程语言中的库...每个新系统似乎都使用自己的特殊标准.Unix时间在许多方面都是愚蠢的; 它只有无处不在的优势:) (7认同)
  • 然而,这不会处理闰秒.[点击这里](http://en.wikipedia.org/wiki/Unix_time)了解更多信息. (3认同)
  • 我知道Unix时间戳不包括闰秒.你暗示Matlab的日期/时间函数是否包含闰秒?所以我必须找出一种方法来解释这种差异? (2认同)

Cla*_*ark 27

较新版本的MATLAB(在R2015a中验证)具有日期时间类型,可用于处理和格式化日期和时间.您可以使用UNIX将UNIX时间戳转换为MATLAB日期时间

dt = datetime( unix_time, 'ConvertFrom', 'posixtime' );
Run Code Online (Sandbox Code Playgroud)

然后像以前一样使用datestr格式化为字符串

datestr( dt )
Run Code Online (Sandbox Code Playgroud)