Вопрос

Я установил дату модификации файла, созданного в Java, на определенный номер. Когда я зачитываю это значение в Windows, я получаю то же значение. Однако в Linux (Ubuntu) я получаю другое значение. Значение File.lastModified () отключено на 9 часов, но когда я просматриваю свойства файла, я вижу, что оно отключено только на 1 час. Я ожидаю того же значения по всем направлениям.

Я ошибаюсь, чтобы полагаться на то, что это совместимо и последовательно? javadoc довольно однозначен по смыслу метода и не упоминает о потенциальных несовместимостях.

Это было полезно?

Решение

Это почти наверняка проблема с часовым поясом. Метод Java использует / ожидает GMT, ОС отобразит местное время, которое учитывает разницу. Теперь реальный вопрос: как хранится время в файловой системе?

Какую файловую систему вы используете? Вероятно, FAT32 - который хранит временные метки по местному времени, что затрудняет поддержание их согласованности в разных ОС. Я не уверен, где именно что-то пойдет не так, но это может быть проблема конфигурации ОС или ошибка JVM - какую JVM вы используете в Linux?

Другие советы

вы проверили возвращаемое значение setLastModified ?

Возврат:

true if and only if the operation succeeded; false otherwise

Я предполагаю, что это проблема часового пояса. Обратите внимание, что Javadoc сообщает "миллисекунды с начала эпохи (00:00:00 GMT , 1 января 1970 г.)" (выделение добавлено). Возможно ли, что значение, которое вы передали в setModified, составляло миллисекунды со времени местного времени ? Если это так, то у вас будет один час, поскольку местное время в Бельгии составляет GMT + 1. Это объясняет время в диалоговом окне свойств.

Я затрудняюсь объяснить разницу в 9 часов от lastModified (), если только java или ОС не каким-то образом кэшируют старое значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top