Po przeczytaniu mtime
pliku z Java przy użyciu Files.getLastModifiedTime
, zwracana wartość jest obcinana do całych sekund. Wiem, że działa to na innych systemach, aby uzyskać mtime z rozdzielczością milisekundy, więc co może być innego w moim?Pobierz plik mtime z rozdzielczością milisekundową z Java
Powyżej znajduje się pełna próba samodzielna który kompiluje i uruchamia:
import java.nio.file.attribute.FileTime;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Test {
public static void main(String[] args) throws java.io.IOException {
FileTime timestamp = Files.getLastModifiedTime(Paths.get("/tmp/test"));
System.out.println(timestamp.toMillis());
}
}
Wyjście jest (z mojego konkretnego pliku testowego) 1405602038000
, natomiast ls
Wystawy:
$ ls --full-time /tmp/test
-rw-rw-r-- 1 daniel daniel 0 2014-07-17 16:00:38.413008992 +0300 /tmp/test
spodziewałbym Java wyjście to 1405602038413
.
Używam systemu Linux z ext4. Próbowałem zarówno openjdk 1.7, jak i Oracle jdk 1.8.
nie zrozumiałeś. Wartość zwrócona przez 'time.toMillis' jest już obcięta do rozdzielczości drugiej sekundy (tzn. Zawsze kończy się na trzech zerach). To jest złe. – danarmak
To wydaje się dziwne, ponieważ gdy próbuję tego na moim komputerze, mam rozdzielczość milisekundową. – lerobyte
Jestem świadomy, że to działa dla innych (redagowałem to pytanie, aby to wyjaśnić), ale to nie działa tutaj i próbuję zrozumieć dlaczego. – danarmak