- PR -

ネイティブコード内で取得した日付シリアル値をJava側に渡すには?

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 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 ]
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-09-11 17:11
Win32のAPIの FileTimeToSystemTime でファイル日付からシステム日付に変更して、
ネイティブコードの中でjava.util.Date#UTC()を使って、UTCにシステム日付の年・月・
日・時・分・秒をわたして変換することでできました。
yamasa
ベテラン
会議室デビュー日: 2003/02/15
投稿数: 80
投稿日時: 2003-09-11 17:54
もう解決しているようですが、別の方法を。

Win32では1601年1月1日0時0分を基準に
100ナノ秒(=1/10000ミリ秒)単位の時刻が返ってきます。
よって、Win32側の値を10000で割り、
11644473600000を引けば、ミリ秒単位のJava時刻が得られます。

参考:
http://xml-x.org/time.html
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-09-12 09:26
yamasaさん、こんにちは。
返答ありがとうございます。

そんな方法もあるんですね。そちらのほうが簡単で、速そうなのでそちらを採用してみます。
1

スキルアップ/キャリアアップ(JOB@IT)