在Matlab中,我有一個數組時間毫秒(數組數組)。我想將它們轉換爲UTC日期時間格式,例如DD-MM-YYYY HH:MM。在Matlab中將時元轉換爲日期
有沒有一個預定義的Matlab方法來做到這一點,還是我必須寫我自己的功能?
在Matlab中,我有一個數組時間毫秒(數組數組)。我想將它們轉換爲UTC日期時間格式,例如DD-MM-YYYY HH:MM。在Matlab中將時元轉換爲日期
有沒有一個預定義的Matlab方法來做到這一點,還是我必須寫我自己的功能?
假設你開始一個載體time_unix
,則:
>> time_unix = 1339116554872; % example time
>> time_reference = datenum('1970', 'yyyy');
>> time_matlab = time_reference + time_unix/8.64e7;
>> time_matlab_string = datestr(time_matlab, 'yyyymmdd HH:MM:SS.FFF')
time_matlab_string =
20120608 00:49:14.872
注:
1)見MATLAB的時間的定義。
2)8.64e7是一天中的毫秒數。
3)Matlab不應用任何時區偏移,所以結果是相同的UTC時間。
4)用於向後變換示例:
>> matlab_time = now;
>> unix_time = round(8.64e7 * (matlab_time - datenum('1970', 'yyyy')))
unix_time =
1339118367664
總之,這裏有兩個功能:
function tm = unix2matlab(tu)
tm = datenum('1970', 'yyyy') + tu/864e5;
end
function tu = matlab2unix(tm)
tu = round(864e5 * (tm - datenum('1970', 'yyyy')));
end
這個matlab時間這裏是數字。你總是可以將它轉換爲字符串使用datestr()
太棒了。有一點需要注意的是,現在一些unix時間戳在微秒(甚至是納秒)內,所以'864e5'可能需要是'864e8'或者甚至是'864e11'。 – charleslparker
我試過上面的代碼,但結果是錯誤的。我意識到主要錯誤與Unix時間(epoch時間)的尷尬定義有關。 Unix time (epoch time)被定義爲在1-1-1970,00h:00之後秒的數量,而不是**毫秒**(http://en.wikipedia.org/wiki/Unix_time)的數量。有了這個定義,Unix時間應該被8.64e5而不是8.64e7所分割。
此外,datenum('1970', 'yyyy')
似乎不會導致所需的參考時間1-1-1970,00:00。
這裏是我改進的代碼:
tMatlab = datenum (1970,1,1,0,0) + tUnix/86400;
SERG的答案是什麼,我正常使用的,當我在MATLAB我工作。今天,我發現自己希望在MATLAB中將日期轉換爲,如標題所示 - 沒有在問題主體中指定的日期字符串轉換 - 並從shell中輸出日期編號。
這裏是我看中的圓日數:
TODAY_MATLAB="$[719529 + $[`date +%s`/24/60/60]]"
這其實只是在bash相當於你所期望的:719529是劃時代的datenum(1970-01-01或在MATLAB中爲datenum(1970,1,1)
)。我還通過摸索KSH最近似乎這個可以有這樣完成:
TODAY_EPOCH=`date +%s`
TODAY_MATLAB=`expr $TODAY_EPOCH/24/60/60 + 719529`
作爲一個方面的鍛鍊,我加入到日期小數部分回慶典 - 我沒有理會中ksh,但它只是算術運算而且類似:
N_DIGITS=7
FORMAT=$(printf "%%d.%%0%dd" $N_DIGITS)
NOW_EP_SEC=`date +%s`
SEC_PER_DAY=$((24*60*60))
NOW_EP_DAY=$(($NOW_EP /$SEC_PER_DAY))
SEC_TODAY=$(($NOW_EP_SEC - $NOW_EP_DAY*$SEC_PER_DAY))
TODAY_MATLAB="$((NOW_EP_DAY+719529))"
FRACTION_MATLAB="$(printf '%07d' $((($SEC_TODAY*10**$N_DIGITS)/SEC_PER_DAY)))"
MATLAB_DATENUM=$(printf $FORMAT $TODAY_MATLAB $FRACTION_MATLAB)
echo $MATLAB_DATENUM
您可能正在尋找'datestr'函數。 –