web-dev-qa-db-ja.com

MatlabでUnixタイムスタンプを使用するにはどうすればよいですか?

Unixタイムスタンプ(この場合は、1970年1月1日00:00 UTCからのミリ秒数)を含むデータファイルがいくつかあります。これらをMatlabで人にわかりやすい日付/時刻文字列(たとえば、31-Aug-2012 11:36:24)に変換したいと思います。これをMatlabで簡単に行う方法はありますか、それとも外部ライブラリ(Java.text.SimpleDateFormatなど)を使用した方がよいですか?

15
robguinness

いかがですか

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

_unix_time_が秒単位で指定されている場合、_unix_time/86400_は1970年1月1日からの日数を示します。これに、Matlabのdatenumdatenum(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 ) )
_
31
Rody Oldenhuis

新しいバージョンのMATLAB(R2015aで検証済み)には、日付と時刻の操作とフォーマットに役立つdatetime型があります。以下を使用して、UNIXタイムスタンプをMATLAB日時に変換できます。

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

そして、以前と同じようにdatestrを使用して文字列としてフォーマットします

datestr( dt )
27
Clark