2016-11-14 31 views
0

編輯:我想創建一個文件但沒有時間戳記。 我的代碼是:在Java中沒有時間戳記的creationTime

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

輸出:

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

我該怎麼做才能只:Creation date: 2013-07-25? 當我使用SimpleDateFormat,還給了我一個錯誤: 例如,如果我使用(就像我在這個論壇上見過):

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

回答

1

什麼返回creationTime()是不被支持的FileTime一個SimpleDateFormat這就是爲什麼它失敗了,你需要將其轉換到一個java.util.Date得益於方法toMillis()在明年

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

注意:由於相同的原因,它以String格式失敗(不支持FileTime)。

+0

我只是用的: 字符串輸出= data.substring(0, 10); ...它似乎工作! – Margherita

+0

是的,它會適用於這種特定的日期格式,因爲它被聲明爲Javadoc [FileTime#toString()](https://docs.oracle.com/javase/8/docs/api/java/nio/file/屬性/ FileTime.html#toString--)將以ISO格式返回。你可以回答你自己的問題 –

1

creationTime返回FileTime。我們可以從中獲得instancemills

FileTime ft = attr.creationTime(); 

轉換爲Date

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

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

請注意,OP似乎是要求UTC時區的日期 - 儘管你的建議可能更有意義。 – assylias

0

如果selectedFile的類型是java.io.File,你可以不喜歡它

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);