使用する一部のファイルの「最終修正」フィールドを変更するJavaサービスを構築しています。
サービスはファイルのコピーをフォルダに保存し、定期的にデータベースの変更を確認し、ファイルシステムのタイムスタンプよりも最新の「最後の変更」タイムスタンプを持つファイルをデータベースから検出すると、そのファイルを削除します。ファイルシステムから新しいコピーをダウンロードし、ファイルの「最後の変更」フィールドをデータベースのフィールドと一致するように設定します。
これらすべてが期待どおりに機能します。コードはtimestamp
データベースからSQLを照会し、時間を取得してファイルオブジェクトのメソッドLong
に渡します。これは期待どおりに機能し、比較を実行すると、2つのタイムスタンプが期待どおりに一致します。ただし、サーバーにSSHで接続してファイルを含むフォルダで実行すると、最後に変更されたタイムスタンプに「2019」と表示されます。ただし、コマンドを実行すると、タイムスタンプ全体が表示され、正確です。なぜこれですか?ファイルにタイムスタンプを設定するときに設定する必要がある他のフラグはありますか?今これはちょうど面倒です。なぜこのように見えるのだろうか。以下はそのスクリーンショットです: file.setLastModified()
ls -l
ls --full-time
答え1
あなたのファイルは「将来から来る」かもしれません。つまりそのタイムスタンプが実行されているシステムの現在時刻より後ですls
。この場合、ls
時間の代わりに年が表示されます。
これはPOSIXで指定:ls
過去6ヶ月以内に変更されたファイルの日付と時刻だけでなく、他の項目の日付と年も表示します。 「未来」は「過去6ヶ月」ではないため、年が表示されます。