我有一些包含Unix时间戳的数据文件(在这种情况下,是自1970年1月1日00:00 UTC以来的毫秒数)。我想在Matlab中将它们转换为易于阅读的日期/时间字符串(例如31-Aug-2012 11:36:24)。在Matlab中是否有简单的方法可以做到这一点,或者我最好使用外部库(例如java.text.SimpleDateFormat)?
我有一些包含Unix时间戳的数据文件(在这种情况下,是自1970年1月1日00:00 UTC以来的毫秒数)。我想在Matlab中将它们转换为易于阅读的日期/时间字符串(例如31-Aug-2012 11:36:24)。在Matlab中是否有简单的方法可以做到这一点,或者我最好使用外部库(例如java.text.SimpleDateFormat)?
如何处理呢?
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 ) )
较新版本的MATLAB(在R2015a中进行了验证)具有日期时间类型,可用于处理和格式化日期和时间。您可以使用以下方法将UNIX时间戳转换为MATLAB日期时间:
dt = datetime( unix_time, 'ConvertFrom', 'posixtime' );
然后像以前一样使用datestr将其格式化为字符串
datestr( dt )
datestr(unix_time / 86400 / 1000 + datenum(1970,1,1))
时,它会给出正确的答案,即09-Aug-2015 00:00:16。但是,如果我运行cmddt = datetime(unix_time,'ConvertFrom','posixtime')
datestr(dt)
,我得到的值是31-Jul-47572 04:41:47。我做错了什么? - sreeraj t
(datenum('1999-01-01 00:00:00')-datenum('1998-12-31 23:59:59'))*86400
应该返回2
,但实际上返回了1
。 - quazgar