3

MATLABを使用してUTC時間から文字列への時間変換を支援することを探しています。

2010年10月末に収集されたデータファイルから時間を抽出しようとしています。データファイルにはUTC時間でレポートされていると記載されており、フィールドはミリ秒単位の整数文字列値で、約3.02e11です。これを文字列に変換したいのですが、問題があります。

単位は間違いなくミリ秒単位であることがわかったので、datenum形式と互換性を持たせるために、これを数分の1に変換します。

10月末(たとえば2010年10月31日)にデータが収集された場合、どのような数値が得られるかを推測できます。私は2001年1月1日が良い時代になると思い、どのような数(日数)を取得できるかを計算しました。

suspectedDate = datenum('October 31, 2010')
suspectedEpoch = datenum('January 1, 2001')

suspectedTimeInDays = suspectedDate - suspectedEpoch

これは3590として出てきます。

しかし、私の実際の時間は、日数で、次のコードで出てきます

actualTime = 3.02e11
actualTimeInDays = 3.02e11/1000/24/3600

3495.4として。

違いはわずか94.6であり、通年ではないため、これは厄介です。これは、ファイルのドキュメントが間違っているか、エポックが2001年4月1日から5日に近いことを意味します。

calculatedEpoch = suspectedDate - actualTimeInDays
calculatedEpochStr = datestr(calculatedEpoch) 

または、エポックが2001年1月1日の場合、ファイル内の実際の日付は7月末からです。

ifEpochIsJanuaryDate = suspectedEpoch + actualTimeInDays
ifEpochIsJanuaryDateStr = datestr(ifEpochIsJanuaryDate) 

これは既知のUTC形式ですか?3.02e11マグニチュード数から10月の日付を取得する方法について誰かが提案できますか?

4

2 に答える 2

4

今日のUnix時間は約13e11で、1970年以降のミリ秒単位で測定されます。

あなたの時間が〜3e11の場合、それはおそらく2000年以降です。

>> 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)2000年以降の場合は、1970年を2000年に変更します。

2)MATLABの時間の定義を参照してください。

3)8.64e7は、1日のミリ秒数です。

4)Matlabはタイムゾーンシフトを適用しないため、結果は同じUTC時間になります。

5)逆変換の例:

>> matlab_time = now;
>> unix_time = round(8.64e7 * (matlab_time - datenum('1970', 'yyyy')))

unix_time =

             1339118367664
于 2012-06-07T22:06:52.747 に答える
2

自分のエポックを作ることはできません。またdatenum、数日で物事を返します。ですから、数学をすることで得た親密さは偶然の一致でした。

結局のところ

>> datenum('Jan-1-0000')

ans =

     1

>> datenum('Jan-1-0001')

ans =

   367

したがって、Matlabは0000年1月1日から数日で物を返すはずです。(タイプミスではありません)

ただし、この数値を注意深く3.02e11調べて、それが何を意味するのかを正確に把握します。1970年1月1日から数秒である標準のUnixUTCではないと確信しています。大きすぎます。GMTに近い:月曜日、1月1日1154008:53:20UTC。

于 2012-06-07T18:01:36.557 に答える