文字列型を日付型に変換

解決


pikopen  2004-11-27 16:03:12  No: 86951  IP: [192.*.*.*]

文字列型を日付型に変換するにはどうしたらいいのでしょうか?
4バイトの文字"ァラA"は実は、日付+時間なのですが、
処理の仕方がわかりません。

編集 削除
ABC  2004-11-27 17:12:33  No: 86952  IP: [192.*.*.*]

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&

でどうですかね。

編集 削除
ABC  2004-11-27 17:13:59  No: 86953  IP: [192.*.*.*]

コピー方向が逆でした
>CopyMemory ByVal strDate,datDate,8&    ×

CopyMemory datDate,ByVal strDate,8&    ○

編集 削除
pikopen  2004-11-27 22:07:09  No: 86954  IP: [192.*.*.*]

日付の長さは8byteです。(string * 4)

結果、まだできていません。
1899/12/30 00:00:00
で、おそらくCopyMemory変換できていないようです。

ソフトは、
DocuWorks 5.0でSDKを使って、ファイルのプロパティの
日付属性を取得するAPIを操作しています。

編集 削除
ABC  2004-11-27 23:01:29  No: 86955  IP: [192.*.*.*]

変換しろといわれても、その8バイトでどう日付を表現しているのか
分からないと変換しようがないと思いますが。いかがでしょう。

コピーはできてると思いますよ。

編集 削除
ABC  2004-11-28 00:43:15  No: 86956  IP: [192.*.*.*]

あとCopyMemoryの説明読めばわかると思いますけど変換するものじゃありません。
何を示したかったかというと
Stringに格納されているバイトデータを他のデータ型の変数に
コピーするやりかたを示しました。
あとは応用してやってください。

編集 削除
pikopen  2004-11-28 11:52:21  No: 86957  IP: [192.*.*.*]

DocuWorks5.0のAPIを見ていると、他の関数の項目で日付に関するところで、
32bit符号付き整数へのポインタ  とありました。
試しに、

Dim lnDate As Long '<----dateから変更
Dim strDate As String  

CopyMemory lnDate, ByVal strDate, 8&

と書き換えると、1104594178、1104616056、1104594178
となんとなく日付+時間のシリアル値らしき値がでてきました。

そこで、質問なのですが、32bitシリアル値を日付に変換する方法は
あるのでしょうか?

編集 削除
pikopen  2004-11-28 18:47:13  No: 86958  IP: [192.*.*.*]

日時を、システムで処理する場合32BIT LONG型になるそうです。
値を、"1970/1/1 00:00:00"から加算するとうまくいきました。
Dim lnDate As Long で呼び出して、
DateAdd("s",lnDate,"yyyy/mm/dd")  でOKでした。

-----
あとで、結構あちこちの掲示板で書かれていました。

編集 削除
pikopen  2004-11-28 18:48:29  No: 86959  IP: [192.*.*.*]

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

編集 削除