簡體   English   中英

獲取URL的上次修改日期

[英]Get the Last Modified date of an URL

我有三個代碼。 這是第一個獲取任何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

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

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

輸出之間的差異是由於時區。 使用new Date()可以使用VM默認時區。 首選日歷,或最佳 - joda-time DateTime ,支持自定義時區。

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

最后修改日期應該是GMT(RFC 2822),所以你應該得到這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM