17

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

4

2 回答 2

34

怎么样

date = datestr(unix_time/86400 + datenum(1970,1,1))

如果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))

包裹在函数中,这些将是

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 ) )
于 2012-08-31T08:43:35.257 回答
31

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

dt = datetime( unix_time, 'ConvertFrom', 'posixtime' );

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

datestr( dt )
于 2015-08-05T16:18:18.367 回答