[C#]日付の変換

アバター
バグ
記事: 130
登録日時: 14年前
住所: 愛媛県
連絡を取る:

[C#]日付の変換

投稿記事 by バグ » 12年前

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

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

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

CODE:

// binはbyte型配列です
DateTime dt = DateTime.FromBinary(BitConverter.ToInt64(bin, 0));
こんなコーディングをしました。
しかし、例外発生しまくり・・・orz

なんだこれは?

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

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

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

CODE:

// binはbyte型配列です
DateTime dt = DateTime.FromOADate(BitConverter.ToDouble(bin, 0));
これでいいらしい。
もうちょい分かりやすい名前つけてくれよ・・・

アバター
GRAM
記事: 164
登録日時: 14年前

RE: [C#]日付の変換

投稿記事 by GRAM » 12年前

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