2009-08-04 29 views
4

Javaで作成されたファイルの変更日を特定の番号に設定しました。私がWindows上でその価値を読んだとき、私は同じ価値を出します。しかし、Linux(ubuntu)では別の価値があります。 File.lastModified()の値は9時間ずれていますが、ファイルのプロパティを見ると、1時間だけオフになっています。私は全面的に同じ価値を期待しています。Javaのファイル修正日

私はこれが互換性があり、一貫しているとは間違っていますか? javadocは、メソッドの意味でかなり明確であり、潜在的な非互換性は言及していません。

答えて

3

それはほぼ確実にタイムゾーンの問題です。 JavaメソッドはGMTを使用/使用しますが、OSは現地時間を表示します。今実際の質問は、ファイルシステムに時間がどのように格納されているかです。

どのファイルシステムを使用していますか?たぶんFAT32 - 現地時間でタイムスタンプを保存するので、OS間で一貫性を保つのが難しくなります。正確に何がうまくいかないのか分かりませんが、OSの設定上の問題やJVMのバグ(Linux上でJVMを使用していますか?

+0

ファイルがUSBスティックにあるので、どのファイルシステムがそこに適用されるのか分かりません。しかし、タイムゾーンのことは理にかなっています。 –

+1

USBスティックはほとんどの場合常にFAT32を使用します。 –

0

setLastModifiedの戻り値を確認しましたか?

戻り値:

true if and only if the operation succeeded; false otherwise 
+0

日付が大きく異なるため、確かに何かが変更されました。 –

0

私の推測では、それはタイムゾーンの問題です。 javadocは「エポック(00:00:00 GMT、1970年1月1日)からのミリ秒」と強調しています(強調が追加されています)。あなたがsetModifiedに渡した値は、時代がの現地時間以来、ミリ秒であった可能性はありますか?もしそうなら、あなたはベルギーの現地時間がGMT + 1であるから1時間です。それはプロパティダイアログの時間を説明します。

javaやosが何らかの形で古い値をキャッシュしていない限り、私はlastModified()との9時間の違いを説明することができません。

+0

タイムゾーンのことは理にかなっています。私はそれを調べます。 –