获取URL的上次修改日期

我有三个代码。 这是我获取任何url的元数据信息的第一个,在该元数据中我也有LastModified日期。 如果我运行这个类,那么我得到最后修改的url日期为 –

key:- Last-Modified value:- 2011-10-21T03:18:28Z 

第一

 public class App { private static Map 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 

我很困惑哪一个是对的。 我认为第一个是正确的。 任何建议将不胜感激..

第一段代码从PDF文件的元数据中提取日期,而另外两条代码从Web服务器返回的HTTP头中获取信息。 如果您想知道文档的创建/修改时间,第一个可能更准确。

最好的选择是第三个 – connection.getLastModified() ,因为它是最易于使用的方法,具有最高级别的抽象。 所有其余的都在较低的抽象级别上:第一个读取原始响应,第二个读取原始头。 第三个读取标题并将其转换为long。

输出之间的差异是由于时区。 使用new Date()可以使用VM默认时区。 首选日历,或最佳 – joda-time DateTime ,支持自定义时区。

最后修改日期应该是GMT(RFC 2822),所以你应该得到这样的:

 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); Long dateTime = connection.getLastModified(); connection.disconnect(); ZonedDateTime urlLastModified = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateTime), ZoneId.of("GMT"));