2011-11-03 17 views
18

私は3つのコードを持っています。これは、私が任意のURLのメタデータ情報を取得し、そのメタデータにLastModified日付を持つ最初のものです。私はこのクラスを実行する場合、私はこのコードを実行し、それをするとき、私はちょうどこの下のURLの最終更新日を取得

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

第1

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

    } 

} 

しかし、第二の例についてas-- URLの最終更新日付を取得しますurl。私はそのURLの最終変更日付を取得します。どちらが正しいかを確認する方法。私はブラウザでそのpdfを開こうとしたが、ブラウザでは開こうとしなかった。ブラウザ上ではなくAdobe PDFをコンピュータ上で開いているので、火かき棒を調べることができません。私は

Thu, 03 Nov 2011 16:59:41 +0000 

サードWay--

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

} 
} 

によってAS-ラスのModの日付を取得上記1の場合

セカンドWay--

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

第3の方法私はこれのようにそれを得る -

Last-Modified: Thu Nov 03 09:59:41 PDT 2011 

どちらが正しいか混乱します。私は最初のものが正しいと思います。任意の提案が評価されます..

答えて

4

最初のコードは、PDFファイルのメタデータから日付を抽出し、他の2つはWebサーバーから返されたHTTPヘッダーから情報を取得します。最初の文書は、ドキュメントがいつ作成され/変更されたかを知りたければ、おそらくより正確です。

11

最も使いやすい方法であり、抽象度が最も高いので、connection.getLastModified()の3つ目はconnection.getLastModified()です。残りのすべては、より抽象度の低いレベルにあります。最初のレスポンスは未処理のレスポンスを読み取り、2番目のレスポンスは未処理のヘッダーを読み取ります。 3番目はヘッダを読み込み、それをlongに変換します。

出力の違いは、タイムゾーンによるものです。 new Date()を使用すると、VMのデフォルトタイムゾーンが使用されます。カレンダーを優先するか、またはカスタムタイムゾーンをサポートするベストjoda-time 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")); 
関連する問題