我有三个代码。这是第一个获取任何URL的元数据信息的元素,在元数据中我也有LastModified日期。如果我运行这个类,那么我将url的最后修改日期改为 -
key:- Last-Modified
value:- 2011-10-21T03:18:28Z
第一个
public class App {
private static Map<String, String> metaData;
public static void main(String[] args) {
Tika t = new Tika();
Metadata md = new Metadata();
URL u = null;
try {
u = new URL("http://www.xyz.com/documents/files/xyz-china.pdf");
String content1= t.parseToString(u);
System.out.println("hello" +content1);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TikaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Reader r = t.parse(u.openStream(), md);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
for (String name : md.names()){
String value = md.get(name);
System.out.println("key:- " +name);
System.out.println("value:- " +value);
//getMetaData().put(name.toLowerCase(), md.get(name));
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
但是对于第二个例子,当我运行此代码并使用相同的url时。我得到该URL的上次修改日期。如何确定哪一个是正确的。当我尝试在浏览器中打开pdf而不是在浏览器中打开时。它是在计算机上使用Adobe PDF而不是在浏览器上打开的,因此我无法通过firebug进行检查。
第二种方式 -
public class LastMod{
public static void main(String args[]) throws Exception {
URL url = new URL("http://www.xyz.com/documents/files/xyz-china.pdf");
System.out.println("URL:- " +url);
URLConnection connection = url.openConnection();
System.out.println(connection.getHeaderField("Last-Modified"));
}
}
对于上面的一个,我将Las Mod日期定为 -
Thu, 03 Nov 2011 16:59:41 +0000
第三种方式 -
public class Main{
public static void main(String args[]) throws Exception {
URL url = new URL("http://www.xyz.com/documents/files/xyz-china.pdf");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
long date = httpCon.getLastModified();
if (date == 0)
System.out.println("No last-modified information.");
else
System.out.println("Last-Modified: " + new Date(date));
}
}
通过第三种方法我得到它 -
Last-Modified: Thu Nov 03 09:59:41 PDT 2011
我很困惑哪一个是对的。我认为第一个是正确的。任何建议将不胜感激..
答案 0 :(得分:14)
最好的选择是第三个选项 - connection.getLastModified()
,因为它是最易于使用的方法,具有最高级别的抽象。所有其余的都在较低的抽象级别上:第一个读取原始响应,第二个读取原始头。第三个读取标题并将其转换为long。
输出之间的差异是由于时区。使用new Date()
您可以使用VM默认时区。首选日历,或最佳 - joda-time DateTime
,支持自定义时区。
答案 1 :(得分:4)
第一段代码从PDF文件的元数据中提取日期,而另外两段代码从Web服务器返回的HTTP头中获取信息。如果您想知道文档何时被创建/修改,第一个可能更准确。
答案 2 :(得分:0)
最后修改日期应该是GMT(RFC 2822)所以你应该这样得到它:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Long dateTime = connection.getLastModified();
connection.disconnect();
ZonedDateTime urlLastModified = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateTime), ZoneId.of("GMT"));