- - PR -
ネイティブコード内で取得した日付シリアル値をJava側に渡すには?
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-09-11 14:43
こんにちは。
JNIのWin32のネイティブコード内で取得したファイル更新日時をJavaに受け渡すDLLを 作っています。 Win32では FindFirstFile で取得されたファイル情報がWIN32_FIND_DATA構造体に 格納されます。 WIN32_FIND_DATA構造体に ftCreationTime があり、その中にdwHighDateTimeと、 dwLowDateTimeのDWORD型の変数が格納されています。 それを、jlong型に格納して、Java側でDate型として使用したいと思っています。 Javaでは、日付シリアル値が1970年1月1日からミリ秒でlong型で取得・設定できまが、 Win32ではおそらく基準値が違うと思われます。 実際、javaのFile#lastModified()で取得した値とFindFirstFileで取得された値では 違っていました。 ネイティブコード内で取得した日付シリアル値をJava側に渡すにはどのようにすれば いいのでしょうか?ご存知のかたおられますか? [ メッセージ編集済み 編集者: maru 編集日時 2003-09-11 14:46 ] |
|
投稿日時: 2003-09-11 17:11
Win32のAPIの FileTimeToSystemTime でファイル日付からシステム日付に変更して、
ネイティブコードの中でjava.util.Date#UTC()を使って、UTCにシステム日付の年・月・ 日・時・分・秒をわたして変換することでできました。 |
|
投稿日時: 2003-09-11 17:54
もう解決しているようですが、別の方法を。
Win32では1601年1月1日0時0分を基準に 100ナノ秒(=1/10000ミリ秒)単位の時刻が返ってきます。 よって、Win32側の値を10000で割り、 11644473600000を引けば、ミリ秒単位のJava時刻が得られます。 参考: http://xml-x.org/time.html |
|
投稿日時: 2003-09-12 09:26
yamasaさん、こんにちは。
返答ありがとうございます。 そんな方法もあるんですね。そちらのほうが簡単で、速そうなのでそちらを採用してみます。 |
1
