Почему Java (Android?) Устанавливает дату последнего изменения моего файла на завтра?

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

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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам