0

現在、不明なタイムスタンプ メカニズムを使用するシステムを扱っています。

システムは Windows マシンで実行されているため、タイムスタンプにある種の Windows エポックを使用しているのではないかと最初に考えましたが、そうではないようです。

私の目標は、これらのタイムスタンプを Unix タイムスタンプに変換することです。


いくつかの例:

次のタイムスタンプ: は次のよう2111441659に変換されます:2013-10-01 11:59

  • 21114419982013-10-01 17:14
  • 21114438762013-10-02 14:36
  • 21114440892013-10-02 17:57

(すべての日付は GMT+2 です)

上記のデータを使用して基準日を計算しようとしましたが、どういうわけか、タイムスタンプごとに異なる結果が得られます。

誰かがこのやや奇妙な問題に光を当てることができますか?

前もって感謝します!

4

3 に答える 3

0

自分のタイムスタンプをUnixタイムスタンプと区別するために、自分のタイムスタンプをThe Counterと呼びましょう。

したがって、対応する DateTime 値を持つ 4 つのカウンター値があります。最初に行うことは、カウンターの単位とリアルタイム単位の対応を計算することです。たとえば、秒としましょう。

そのためには、(1) d2 つのカウンター値の差と (2)s対応する DateTime の差 (秒単位) が必要です。

最初の 2 つの値を考えるとd1=2111441998-2111441659=339. 2013-10-01 11:59との差2013-10-01 17:14(秒単位) はs1=18900です。したがって、カウンターの単位はu1=s1/d1=55.7522123894秒に対応します。

しかし、ペア #2 と #3 で同じことを行うと、そのu2=40.9584664536秒がわかります。

同様に、ペア #3 と #4 からもu3=56.6197183114秒数が得られます。

したがって、私の結論は、カウンター値と対応する提供される DateTimes の間に整合性がないということです。これが、サンプルごとに異なる結果が得られる理由です。

于 2013-10-06T12:52:20.740 に答える
0

私には、その数はミリ秒のように小さいようです。私の最初の推測は秒でしたが、速度を見て、この数値は変化するため、分の方がより良い推測だと思います。2111441659/60/24/365 = 4017.20254756 という計算をすると、エポックが -2000 年にある可能性があります。

これはコンピューティングにおける一般的なエポックのリストですが、-2000 年は実際には存在しません :) このタイムスタンプはどのように取得していますか?

PS このマシンの年は 4013 ではなく 2013 に設定されていますか? :) これは、1 年目の 1 月 1 日の .NET エポックに適合します。

于 2013-10-06T07:55:31.127 に答える
0

最後に、タイムスタンプと日時を何時間も比較し、それらの間のロジックを発見しようとした後、タイムスタンプを生成するソフトウェアをリバース エンジニアリングすることで答えを見つけました。

整数のタイムスタンプは、実際には日時のビット単位の表現*であることがわかります。

擬似コード:

year = TimeStamp >> 20;

month = (TimeStamp >> 16) & 15;

day = (TimeStamp >> 11) & 31;

hour = (TimeStamp >> 6) & 31;

minute = TimeStamp & 63;

この言葉が正しいかどうかはわかりませんが、違っていたら訂正してください。

于 2013-10-23T22:38:57.467 に答える