バグ の日記

[C#]日付の変換

パーマリンク by バグ on 2013年4月19日(金) 17:50

ちょっとハマりかけたので備忘録かわりの日記。

バイナリ形式で日付が保存されていて、それを人間様に分かるようにしたいという作業をしておりました。
仕様書を見ると、型=DATE、サイズ=8バイトとしか書かれておりません。

そこで私は何も考えずに・・・

コード[C#]: 全て選択
1
2
// binはbyte型配列です
DateTime dt = DateTime.FromBinary(BitConverter.ToInt64(bin, 0));

こんなコーディングをしました。
しかし、例外発生しまくり・・・orz

なんだこれは?

ひょっとして、PLCから出力されているデータだからエンディアンが違うのか?
と反転させてみたりしたものの改善せず・・・orz

しばらく悩んでから、この日付データを使用している別のソフトの存在を思い出し、ソースを解析してみる。
ちなみにそのソフトはVC++6.0時代のMFCが使われていまして、COleDateTimeクラスが使われておりました。

どうも、この辺りにヒントがありそうだな・・・とグーグル先生で検索してみると・・・ありましたよ。

コード[C#]: 全て選択
1
2
// binはbyte型配列です
DateTime dt = DateTime.FromOADate(BitConverter.ToDouble(bin, 0));


これでいいらしい。
もうちょい分かりやすい名前つけてくれよ・・・

コメント

RE: [C#]日付の変換

パーマリンク by GRAM on 2013年4月19日(金) 23:33

たしかエクセルデータをC#で扱う時、エクセルの日付の項目がやはりdoubleで保存されていて、読み込むとき同様のメソッドを使う必要がありました。
てっきりテキストだと思ってたから、最初は何だこれ???ってなりました。