2011-11-03 49 views
18

我有三個代碼。這是我第一次獲取任何網址的元數據信息,並且在該元數據中我也有LastModified日期。如果我運行這個類,然後我得到URL的最後修改日期as--獲取網址的上次修改日期

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的最後修改日期。如何確定哪一個是正確的。正如我試圖在瀏覽器中打開該pdf,而不是在瀏覽器中打開。它在計算機上不在瀏覽器中使用Adobe PDF打開,因此我無法通過螢火蟲進行檢查。

其次方式 -

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

對於上述一個我得到拉斯維加斯國防部日期原樣

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 

我很困惑哪一個是正確的。我認爲第一個是正確的。任何建議將不勝感激。

回答

4

第一段代碼從PDF文件的元數據中提取日期,而另外兩段代碼從Web服務器返回的HTTP頭中獲取信息。如果你想知道文檔何時被創建/修改,第一個可能更準確。

11

最好的選擇是第三個 - connection.getLastModified(),因爲它是最容易使用的方法,並具有最高級別的抽象。其餘的都在較低的抽象層次上:第一個讀取原始響應,第二個讀取原始頭文件。第三個讀取頭並將其轉換爲長。

輸出之間的差異是由於時區。使用new Date()您使用VM默認時區。喜歡日曆,或最好 - 支持自定義時區的約達時間DateTime

+0

所以,你一定要與第三個方法我得到正確的lastmod日期。至於我無法弄清楚... – ferhan

+0

是的,看我的更新 – Bozho

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")); 
相關問題