4

2008 年 3 月 10 日 = 1822556159

2008 年 2 月 10 日 = 1822523391

2008 年 1 月 10 日 = 1822490623

2008 年 9 月 30 日 = 1822392319

2008 年 9 月 29 日 = 1822359551

現時点で分かっている情報は以上です。

増分が 32768 x 2 (65536) の月を変更する場合を除き、日付は 32768 ずつ増分されます。

誰かがこのバイナリ日付形式を見たことがありますか?どうすれば正しい日付を抽出できますか?


日付の残りの部分が時間 (時、分、秒) である可能性があります。

4

4 に答える 4

10

2008 年 9 月 30 日

1822392319 = 0x6c9f7fff
0x6c = 108 = 2008 (based on 1900 start date)
0x9 = 9 = September
0xf7fff - take top 5 bits = 0x1e = 30

2008 年 10 月 1 日

1822490623 = 0x6ca0ffff
0x6c = 108 = 2008
0xa = 10  = October
0x0ffff  - take top 5 bits = 0x01 = 1

残りの 15 個の 1 ビットが何のためにあるのかは、誰にもわかりません。

編集:上位5ビットを取ることで、つまり:

day_of_month = (value >> 15) & 0x1f

同様に:

year = (value >> 24) & 0xff + 1900
month = (value >> 20) & 0x0f
于 2008-11-10T11:41:31.973 に答える
2

編集: Alnitak は、これが固定小数点バイナリ日付表現であることについて正しいです。ただし、原則は以下で説明するものと似ている場合があります。小数点以下の代わりにフォーマットが固​​定され、下位 15 ビットが時間である可能性が高くなります。例があれば投稿してください。

ORIGINAL: これはおそらく、Double を使用して日付と時刻を表す Windows OLE/COM 日付形式です。数値の整数部分は日付用で、小数部分は時刻用です。100 年 1 月 1 日から 9999 年 12 月 31 日までの日付を表すことができます。詳細については、MSDNまたは google で OLE date COM double を参照してください。

編集: DateTime.FromOADate を使用したC# の例を次に示します。これは、 MSDN VariantTimeToSystemTimeからのもう少し詳細です。

バリアント時刻は、1753 年 1 月 1 日から 2078 年 12 月 31 日までの日付を表す 8 バイトの実数値 (double) として格納されます。

値 2.0 は 1900 年 1 月 1 日を表します。3.0 は 1900 年 1 月 2 日などを表します。

値に 1 を追加すると、日付が 1 日増えます。値の小数部分は時刻を表します。したがって、2.5 は 1900 年 1 月 1 日の正午を表します。3.25 は、1900 年 1 月 2 日の午前 6:00 を表します。

負の数は、1899 年 12 月 30 日より前の日付を表します。

COleDateTimeのドキュメントでは 100 年 1 月 1 日をサポートすると記載されているのに対し、このドキュメントでは 1753 年 1 月 1 日をサポートすると記載されているため、これは少し矛盾しています。

VB (CDbl() および CDate() を使用)、C# (DateTime.FromOADate/ToOADate)、Java ( OLEDate - 非推奨に見えます)、DelphiPythonなどのインターフェイスがあります。

于 2008-11-10T12:01:31.013 に答える
2

バイナリ形式で書き留めます。

a = 1822556159
1101100 1010 00011 111111111111111
b = 1822523391
1101100 1010 00010 111111111111111
c = 1822490623
1101100 1010 00001 111111111111111
d = 1822392319    
1101100 1001 11110 111111111111111

Alnitak が言ったように、1101100 は 108 で、残りは月 (1010 または 1001) と日です。

最後の 1 は、秒/ミリ秒を表すために予約されている場合があります。

于 2008-11-10T11:43:48.833 に答える
0

32768 は 2^15 です。彼らは日のために15ビットを予約していますが、それは時間、分、および/または秒の有用な組み合わせに均等に分割されるとは思いません.

于 2008-11-10T11:47:31.883 に答える