文字列型を日付型に変換するにはどうしたらいいのでしょうか?
4バイトの文字"ァラA"は実は、日付+時間なのですが、
処理の仕方がわかりません。
4バイトの文字じゃなくて8バイトのバイナリを無理やり文字として
認識させたら"ァラA"なったということですよね。
VBの日付型は確か8バイトだったはず。
それをString変数で受けてしまったのであれば。
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim strDate As String
Dim datDate As Date
'strDateには8バイトのDATE型の値が入っているとする
CopyMemory ByVal strDate,datDate,8&
でどうですかね。
コピー方向が逆でした
>CopyMemory ByVal strDate,datDate,8& ×
CopyMemory datDate,ByVal strDate,8& ○
日付の長さは8byteです。(string * 4)
結果、まだできていません。
1899/12/30 00:00:00
で、おそらくCopyMemory変換できていないようです。
ソフトは、
DocuWorks 5.0でSDKを使って、ファイルのプロパティの
日付属性を取得するAPIを操作しています。
変換しろといわれても、その8バイトでどう日付を表現しているのか
分からないと変換しようがないと思いますが。いかがでしょう。
コピーはできてると思いますよ。
あとCopyMemoryの説明読めばわかると思いますけど変換するものじゃありません。
何を示したかったかというと
Stringに格納されているバイトデータを他のデータ型の変数に
コピーするやりかたを示しました。
あとは応用してやってください。
DocuWorks5.0のAPIを見ていると、他の関数の項目で日付に関するところで、
32bit符号付き整数へのポインタ とありました。
試しに、
Dim lnDate As Long '<----dateから変更
Dim strDate As String
CopyMemory lnDate, ByVal strDate, 8&
と書き換えると、1104594178、1104616056、1104594178
となんとなく日付+時間のシリアル値らしき値がでてきました。
そこで、質問なのですが、32bitシリアル値を日付に変換する方法は
あるのでしょうか?
日時を、システムで処理する場合32BIT LONG型になるそうです。
値を、"1970/1/1 00:00:00"から加算するとうまくいきました。
Dim lnDate As Long で呼び出して、
DateAdd("s",lnDate,"yyyy/mm/dd") でOKでした。
-----
あとで、結構あちこちの掲示板で書かれていました。
ABCさんありがとうございました。
編集 削除