Дата изменения файла в Java - PullRequest
4 голосов
/ 04 августа 2009

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

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

Ответы [ 3 ]

3 голосов
/ 04 августа 2009

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

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

0 голосов
/ 04 августа 2009

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

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

0 голосов
/ 04 августа 2009

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

Возвращает:

true if and only if the operation succeeded; false otherwise
...