4

以下を使用して、Android アプリケーションでファイルを作成しています。

FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(data);
fos.flush();
fos.close();

その後、クリーンアップを試みているため、最終変更日をしきい値と比較していますが、比較すると、ファイルの最終変更日が明日のいつかであることが示されています。私が明日と言うとき、それは今日 (ファイルの変更日) に相対的であることを覚えておいてください... あなたがこれを読んでいる日がいつであろうと。

したがって、基本的に、今日ファイルを作成し、ファイルの最終変更日を確認すると、最終変更日は明日であると表示されます。

これは Java が行っていることですか、それとも Android ですか、それとも私が行っていることですか?

4

4 に答える 4

1

私は同様の問題に取り組んでいます (ファイルに触れずにlastModified の日付が変更されることがあります) が、回避策が見つかりません。

ファイルを作成するためのテストを作成し、lastModified関数によって返された値を保存し、電話に対するいくつかのアクションの後にこの値を再度確認します (私のデバイスは ですGalaxy S)。

lastModifiedは作業中に内部キャッシュを使用し、このキャッシュはモードを有効/無効にすることでクリアできることがわかりましたUSB(ファイルがオンの場合SDCard)。Cacheこれもしばらくすると自動的にクリアされると思います。キャッシュがクリアされている場合、関数はファイルシステムに保存されている実際の値を読み取ります。

デバイスのタイムゾーンを変更し、lastModified 関数をクリアすると、cache別の時間が返されます (たとえば、GMT+3 から GMT+4 に変更した場合、差は 1 時間です)。

この問題は 100% 再現可能です。

于 2011-12-02T10:16:58.047 に答える
1

テスト デバイス/エミュレーターは、現在の日付と時刻を何として表示しますか? 正しく設定されていないようです。

たとえば、デバイスのタイムゾーンが現地時間以外に設定されていませんか?

于 2010-11-10T01:18:03.917 に答える
0

FileOutputStream (おそらくあなたの写真) を使用して変更および作成される可能性がある、電話上の他のファイルを確認する必要があります。変更日が明日に設定されている場合は、携帯電話の製造元にバグ レポートを提出することをお勧めします。

Nexus One では発生しないとおっしゃっていたので、電話に関連するバグだと思います。

于 2010-11-19T15:40:47.343 に答える
0

を使用して最終変更タイムスタンプを取得すると仮定するとjava.io.File.lastModified()、1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数が取得されます。タイムスタンプは暗黙的に GMT/UTC ベースです。

于 2010-11-10T06:39:35.530 に答える