2016-11-14 1 views
0

EDIT: Je souhaite prendre l'heure de création d'un fichier mais sans horodatage. Mon code est:creationTime sans horodatage en Java

Path path = Paths.get(selectedFile.toURI()); 
BasicFileAttributes attr; 
attr = Files.readAttributes(path, BasicFileAttributes.class); 
System.out.println("Creation date: " + attr.creationTime()); 

Sortie:

Creation date: 2013-07-25T13:52:23.043207Z 

Comment puis-je faire pour avoir seulement: Creation date: 2013-07-25? Lorsque j'utilise SimpleDateFormat, il me renvoie une erreur: par exemple si je l'utilise (comme je l'ai vu dans ce forum):

Calendar c = GregorianCalendar.getInstance(); 
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", attr.creationTime); 
System.out.println("duke: " +s); 

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Répondre

1

Ce qui rend creationTime() est un FileTime qui ne sont pas pris en charge par un SimpleDateFormat qui est pourquoi il échoue, vous avez besoin de le convertir d'abord à un java.util.Date grâce à la méthode suivante toMillis() comme

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
System.out.printf(
    "Creation date: %s%n", format.format(new Date(attr.creationTime().toMillis())) 
); 

NB: Il échoue avec un format String pour la même raison (FileTime non pris en charge).

+0

J'ai simplement utilisé: sortie String = data.substring (0, dix); ... ça a l'air de marcher! – Margherita

+0

oui cela fonctionnera pour ce format de date particulier car il est indiqué dans le Javadoc que [FileTime # toString()] (https://docs.oracle.com/javase/8/docs/api/java/nio/file/ attribute/FileTime.html # toString--) sera retourné au format ISO. Vous pouvez répondre à votre propre question –

1

creationTime renvoie FileTime. Nous pouvons obtenir le instance ou mills de lui.

FileTime ft = attr.creationTime(); 

converti à jour

Instant ins = ft.toInstant(); 
LocalDateTime ldt = LocalDateTime.ofInstant(ins, ZoneId.systemDefault()); 
LocalDate ld = ldt.toLocalDate(); 

ou

LocalDate.ofEpochDay(ft.toMillis()); 
+0

Notez que l'OP semble demander la date dans le fuseau horaire UTC - bien que votre suggestion ait probablement plus de sens. – assylias

0

Si selectedFile est de type java.io.File, vous pouvez le faire comme

long lastModifiedMillis = selectedFile.lastModified(); 
Date lastModifiedDate = new Date(lastModifiedMillis); 
String s = String.format("Duke's Birthday: %1$tY-%1$tm-%1$td", lastModifiedDate); 
System.out.println("duke: " + s);