Почему 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.