如何从图像文件中读取日期和时间

如何从图像文件中读取日期和时间

问题描述:

如何从图像文件(已创建)中精确地获取日期和时间作为yyyyy.MMMMM.dd GGG hh:mm aaa,这是我正在使用的代码。如何从图像文件中读取日期和时间

Path p = Paths.get("C:\\DowloadFolder\\2.png"); 
BasicFileAttributes view = Files.getFileAttributeView(p, BasicFileAttributeView.class).readAttributes(); 

System.out.println(view.creationTime()+" is the same as "+view.lastModifiedTime()); 

我试图用DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");,但不知道如何从图像文件获取日期和时间。

+0

什么是你的问题?如何从嵌入在图像文件中的元数据中提取日期时间?如果是这样,为什么你发布这个代码从文件系统获取日期时间? –

+0

我只想得到一个创建图像的日期时间。 –

你的问题是混淆

你似乎在要求的日期时间创建一个文件时。但是你也可以在你的第一句话中提到一些日期格式。然后你特指图像文件,这意味着你想要以jpeg和其他一些图像格式嵌入元数据。

您的问题有它自己的答案

如果你想要的是一个文件的创建时间,在这个问题的示例代码已经有一个信息,一个java.nio.file.attribute.FileTime对象。

这是我自己演示的一些示例代码。

Path p = Paths.get("/Volumes/Macintosh HD/Users/johndoe/text.txt"); 
BasicFileAttributes view = null; 
try { 
    view = Files.getFileAttributeView(p, BasicFileAttributeView.class).readAttributes(); 
} catch (IOException ex) { 
    Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); 
} 

// As of Java 7, the NIO package added yet another date-time class to the Java platform. 
java.nio.file.attribute.FileTime fileTimeCreation = view.creationTime(); 
java.nio.file.attribute.FileTime fileTimeLastModified = view.lastModifiedTime(); 

fileTimeCreation对象有你的文件的创建日期时间信息。请阅读the doc关于如何使用它。

要与其他类一起使用,您可能希望转换为另一种类型的日期 - 时间对象。使用Joda-TimeJava 8中的新java.time.* package。避免旧的java.util.Date &日历类与Java捆绑在一起,因为它们非常麻烦。

不要忘了时区。通常更好地指定一个所需的时区,而不是依赖于默认值。

// Convert to Joda-Time. 
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
org.joda.time.DateTime dateTime = new DateTime(fileTimeCreation.toMillis(), timeZone); 

// Convert to java.time.* package in Java 8. 
ZoneId zoneId = ZoneId.of("Europe/Paris"); 
ZonedDateTime zonedDateTime = ZonedDateTime.parse(fileTimeCreation.toString()).withZoneSameInstant(zoneId); 

// Convert to java.util.Date 
// Caution: I do not recommend using java.util.Date & Calendar classes. But if you insist… 
java.util.Date date = new java.util.Date(fileTimeCreation.toMillis()); 

转储到控制台...

System.out.println("fileTimeCreation: " + fileTimeCreation); 
System.out.println("fileTimeLastModified: " + fileTimeLastModified); 
System.out.println("Joda-Time dateTime: " + dateTime); 
System.out.println("java.time zonedDateTime: " + zonedDateTime); 
System.out.println("java.util.Date (with default time zone applied): " + date); 

当运行...

fileTimeCreation: 2014-02-16T02:28:51Z 
fileTimeLastModified: 2014-02-16T02:34:17Z 
Joda-Time dateTime: 2014-02-16T03:28:51.000+01:00 
java.time zonedDateTime: 2014-02-16T03:28:51+01:00[Europe/Paris] 
java.util.Date (with default time zone applied): Sat Feb 15 18:28:51 PST 2014 
+0

错误对于混淆抱歉。谢谢你的回答。我认为我做错了 –

有一个库叫做metadata-extractor这个工作。

更多资讯可浏览:here。 或者this one

+0

有什么方法不使用库? –

+0

是的。制作你自己的图书馆。但是,你为什么要这样做*? – jpaugh

+0

我已经导入jar文件,但它仍然有一个'元数据','ImageMetadataReader','目录' –