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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Intereting Posts
Курсив TextView с wrap_contents, кажется, закрепил текст на правом краю Undefined ссылка на 'cocos2d :: UserDefault' Помещение собственного объявления AdMob в listView Как использовать sharedPreferences вне Activity? Как использовать тип вызова с EventBus Получить историю транзакций с Android Pay через API? Список ресивера Android RecyclerView динамически изменяется Drawable.setColorFilter () не работает на Android 2.1 Должен ли я помещать папку Ionic Platforms в исходный элемент управления? Как преобразовать массив байтов изображения в кодировку base64, представляющую jpg Android Marshmallow – как узнать «Никогда не спрашивать снова» проверяется перед Android-градир дублирует собственные общие библиотеки Как я могу использовать SensorManager.getOrientation для управления наклоном, например «My Paper Plane»? Добавить библиотеку поддержки Android v4 для intellij ide Зависимость между тестами JUnit, которые работают на нескольких устройствах одновременно