文字列型を日付型に変換

解決


pikopen  2004-11-28 01:03:12  No: 86951

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


ABC  2004-11-28 02:12:33  No: 86952

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-28 02:13:59  No: 86953

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

CopyMemory datDate,ByVal strDate,8&    ○


pikopen  2004-11-28 07:07:09  No: 86954

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

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

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


ABC  2004-11-28 08:01:29  No: 86955

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

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


ABC  2004-11-28 09:43:15  No: 86956

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


pikopen  2004-11-28 20:52:21  No: 86957

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-29 03:47:13  No: 86958

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

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


pikopen  2004-11-29 03:48:29  No: 86959

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加