Datei mtime mit Millisekundenauflösung aus Java holen

8

Wenn ich die mtime einer Datei aus Java mit Files.getLastModifiedTime lese, wird der Rückgabewert auf ganze Sekunden gekürzt. Ich weiß, dass dies auf anderen Systemen funktioniert, um MIMEs mit Millisekunden-Auflösung zu bekommen, also was könnte anders an meinem sein?

Hier ist ein vollständiger Standalone-Test, der kompiliert und ausführt:

%Vor%

Die Ausgabe ist (mit meiner speziellen Testdatei) 1405602038000 , während ls zeigt:

%Vor%

Ich würde erwarten, dass die Java-Ausgabe 1405602038413 ist.

Ich arbeite unter Linux mit ext4. Ich habe versucht sowohl openjdk 1.7 und Oracle jdk 1.8.

    
danarmak 17.07.2014, 13:14
quelle

4 Antworten

7

Die Möglichkeit, Dateizeitstempel auf * nix-Systemen mit höherer Genauigkeit zu erhalten, wurde in Java 8 von hinzugefügt Dieses commit erfordert jedoch auf der nativen Seite die Einhaltung von POSIX 2008:

%Vor%

Und anscheinend wird die Java-Version, die Sie verwenden, nicht gesetzt, also ist ein Nanosekunden-Teil des Zeitstempels nicht verfügbar und bleibt Null.

    
izstas 17.07.2014, 14:18
quelle
3

Ich habe mir den Quellcode angeschaut:

Im Fall von Java 7 gibt die Methode den letzten modifizierten Zeitstempel mit einer Genauigkeit von 1 Sekunde an:

Im Fall von Java 8 sieht wie aus und sollte Mikrosekunden genau ergeben:

Aber in beiden Fällen scheint der Code keine Möglichkeit zu bieten, den Zeitstempel mit einer anderen Genauigkeit zu erhalten.

    
Stephen C 17.07.2014 13:57
quelle
0

Es scheint in Java 9

behoben zu sein
  • Oracle jdk 9.0.4 - Files.getLastModifiedTime gibt Millisekunden-Auflösung
  • Oracle jdk 1.8.162 - Files.getLastModifiedTime gibt eine zweite Auflösung
michal 26.02.2018 21:47
quelle
-4

Sie können das einfache Datumsformat verwenden, um die Zeit in Millisekunden anzuzeigen:

%Vor%     
lerobyte 17.07.2014 13:30
quelle

Tags und Links