DateTimeのファイル読み書き – プログラミング – Home

DateTimeのファイル読み書き
 
通知
すべてクリア

[解決済] DateTimeのファイル読み書き


へヴん
 へヴん
(@へヴん)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

VB2005にてDateTimeをファイルに書き込みしました。
これをC++(アンマネージドC++)で読みたいのですが
ファイル内がどうなってるかわかりません。
なんとかC++のfreadで書き込み値を読み出し
日時情報を取得したいのです。
都合で書き込み側はプログラム変更できません。
なんとか読み込み側のプログラム変更のみで
日時情報を読めないでしょうか?

((書き込み側))
Public Structure DateData
Public dt As DateTime
End Structure

この構造体をByte配列に変換して
バイナリファイルに書き込みしてます。(8バイト)

((読み込み側))
freadで読みたいが書き込んだ8バイトを見ても意味がわからない
DateTimeはA.D. (西暦紀元) 0001 年 1 月 1 日の午前 00:00:00 からの
100ナノ秒単位の数らしいですが、書き込まれた値はそうは見えません。
VB2005で読み込みするとちゃんと読めます。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> この構造体をByte配列に変換して
> バイナリファイルに書き込みしてます。(8バイト)

これをどのようなコードでやっているかによるでしょう。


返信引用
へヴん
 へヴん
(@へヴん)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

> これをどのようなコードでやっているかによるでしょう。

構造体DateDataの実体を
Marshal.StructureToPtrでIntPtrに変換し、
Marshal.Copyでバイト配列にコピーしてます。

できたバイト配列をBinaryWriteのWriteで書いています。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

DateTime の中身がわからないので、中身を直接バイナリダンプするようなことはやらな
いほうがいいでしょう。
.NET Framework の実装が変わったときに誤動作する可能性があります。

> DateTimeはA.D. (西暦紀元) 0001 年 1 月 1 日の午前 00:00:00 からの
> 100ナノ秒単位の数

が欲しいなら Ticks プロパティで取得できますから、これをファイルに書き込んだほう
がいいです。

が、この値から年月日を求めるのは面倒くさそうですので、少々手間でも、年月日時分秒
(必要であればミリ秒等も)を個別にファイルに書き込むのがよいのではないでしょう
か。


返信引用
へヴん
 へヴん
(@へヴん)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

書き込み側を触れない状況なのでなんともできませんが
機会があれば書き込み側を修正しようと思います。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました