私のファイルの「最後の修正」タイムスタンプに「ls」コマンドを使用すると、年だけが表示されるのはなぜですか? [コピー]

私のファイルの「最後の修正」タイムスタンプに「ls」コマンドを使用すると、年だけが表示されるのはなぜですか? [コピー]

使用する一部のファイルの「最終修正」フィールドを変更するJavaサービスを構築しています。

サービスはファイルのコピーをフォルダに保存し、定期的にデータベースの変更を確認し、ファイルシステムのタイムスタンプよりも最新の「最後の変更」タイムスタンプを持つファイルをデータベースから検出すると、そのファイルを削除します。ファイルシステムから新しいコピーをダウンロードし、ファイルの「最後の変更」フィールドをデータベースのフィールドと一致するように設定します。

これらすべてが期待どおりに機能します。コードはtimestampデータベースからSQLを照会し、時間を取得してファイルオブジェクトのメソッドLongに渡します。これは期待どおりに機能し、比較を実行すると、2つのタイムスタンプが期待どおりに一致します。ただし、サーバーにSSHで接続してファイルを含むフォルダで実行すると、最後に変更されたタイムスタンプに「2019」と表示されます。ただし、コマンドを実行すると、タイムスタンプ全体が表示され、正確です。なぜこれですか?ファイルにタイムスタンプを設定するときに設定する必要がある他のフラグはありますか?今これはちょうど面倒です。なぜこのように見えるのだろうか。以下はそのスクリーンショットです: file.setLastModified()

ls -lls --full-time



ここに画像の説明を入力してください。

答え1

あなたのファイルは「将来から来る」かもしれません。つまりそのタイムスタンプが実行されているシステムの現在時刻より後ですls。この場合、ls時間の代わりに年が表示されます。

これはPOSIXで指定ls過去6ヶ月以内に変更されたファイルの日付と時刻だけでなく、他の項目の日付と年も表示します。 「未来」は「過去6ヶ月」ではないため、年が表示されます。

関連情報