Почему Java (Android?) Устанавливает дату последнего изменения моего файла на завтра? - PullRequest
4 голосов
/ 10 ноября 2010

Я создаю файлы в своем приложении для Android, используя:

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

Затем позже я пытаюсь выполнить некоторую очистку, поэтому я сравниваю дату последнего изменения с некоторым пороговым значением, но сравнение показывает, что последний день изменения файла наступит завтра. Имейте в виду, что когда я говорю «завтра», это относится к сегодняшнему дню (дате изменения файла) ... в какой бы день вы ни читали это.

Таким образом, в общем, если я создаю файл сегодня и проверяю дату последнего изменения файла, он говорит, что он был последний раз изменен завтра.

Это то, что делает Java, или Android, или что-то, что я делаю?

Ответы [ 4 ]

1 голос
/ 02 декабря 2011

Я работаю над аналогичной проблемой ( lastModified date иногда изменяется, не касаясь файла), но не могу найти обходной путь.

Я создаю тест для создания файла, возвращено значение хранилищас помощью функции lastModified и проверьте это значение еще раз после некоторых действий с телефоном (мое устройство Galaxy S).

Я обнаружил, что lastModified использует внутренний кэш во время работыи этот кеш можно очистить, включив / отключив режим USB (если файл включен SDCard).Я также думаю, что это Cache автоматически очищается через некоторый интервал.Если кэш был очищен, то функция считывает реальное значение, сохраненное в файловой системе.

Если вы измените часовой пояс на устройстве и очистите cache, тогда функция lastModified вернется в другое время (разница зависит от нового часового пояса, например, если вы измените с GMT + 3 на GMT + 4, тогда разница составит 1 час).

Эта проблема воспроизводима на 100%.

1 голос
/ 10 ноября 2010

Что показывает на вашем тестовом устройстве / эмуляторе текущая дата и время?Похоже, они просто установлены неправильно.

Установлен ли часовой пояс на устройстве, например, на ваше местное время?

0 голосов
/ 19 ноября 2010

Вам следует проверить другие файлы на вашем телефоне, которые могут быть изменены и созданы с помощью FileOutputStream ( возможно ваши фотографии). Если для них тоже установлена ​​измененная дата завтра, я предлагаю вам отправить отчет об ошибке производителям вашего телефона.

Я предполагаю, что это ошибка, связанная с телефоном, потому что вы сказали, что это не происходит на вашем Nexus One.

0 голосов
/ 10 ноября 2010

Предполагая, что вы используете java.io.File.lastModified(), чтобы получить последнюю модифицированную метку времени, вы получите количество миллисекунд с 00:00:00 по Гринвичу, 1 января 1970 года. Метка времени неявно основана на GMT / UTC. 1002 *

...