사용하는 일부 파일의 "최종 수정" 필드를 수정하는 Java 서비스를 구축 중입니다.
서비스는 파일의 복사본을 폴더에 보관하고 정기적으로 데이터베이스의 변경 사항을 확인하며, 파일 시스템의 타임스탬프보다 최신인 "마지막 수정" 타임스탬프가 있는 파일을 데이터베이스에서 발견하면 해당 파일을 삭제합니다. 파일 시스템에서 새 복사본을 다운로드하고 파일의 "마지막 수정" 필드를 데이터베이스의 필드와 일치하도록 설정합니다.
이 모든 것이 예상대로 작동합니다. 코드에서는 timestamp
데이터베이스에서 SQL을 쿼리하고 시간을 가져와 파일 개체의 메서드 Long
에 전달합니다 . 이는 예상대로 작동하며 비교를 실행할 때 두 타임스탬프가 예상대로 일치합니다. 그러나 서버에 SSH로 연결하여 파일이 포함된 폴더에서 실행하면 마지막으로 수정된 타임스탬프에 "2019"가 표시됩니다. 그러나 명령을 실행하면 전체 타임스탬프가 표시되고 정확합니다. 왜 이런거야? 파일에 타임스탬프를 설정할 때 설정해야 하는 다른 플래그가 있습니까? 이제 이것은 단지 귀찮은 일입니다. 왜 이렇게 보이는지 궁금합니다. 다음은 그 스크린샷입니다: file.setLastModified()
ls -l
ls --full-time
답변1
귀하의 파일은 "미래에서 온" 것일 수 있습니다.즉해당 타임스탬프가 실행 중인 시스템의 현재 시간보다 이후입니다 ls
. 이 경우 ls
시간 대신 연도가 표시됩니다.
이것은POSIX에 의해 지정됨: ls
지난 6개월 이내에 수정된 파일의 날짜와 시간뿐만 아니라 기타 항목의 날짜와 연도도 표시합니다. "미래"는 "지난 6개월"이 아니므로 연도가 표시됩니다.