2011-11-03 29 views
18

की अंतिम संशोधित तिथि जाओ मैं तीन कोड है। यह पहला ऐसा है जिसमें मुझे किसी भी यूआरएल की मेटाडेटा जानकारी मिलती है और उस मेटाडाटा में मेरे पास LastModified डेट भी है। अगर मैं इस वर्ग तो चलाने मैं 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(); 
     } 

    } 

} 

लेकिन सिर्फ इस नीचे जब मैं इस कोड चलाने के लिए और एक ही साथ दूसरे उदाहरण के लिए यूआरएल। मुझे उस यूआरएल की आखिरी संशोधित तारीख मिलती है। यह सुनिश्चित करने के लिए कि कौन सा सही है। जैसे ही मैंने ब्राउज़र में उस पीडीएफ को खोलने की कोशिश की लेकिन ब्राउजर में खुलने की बजाए। यह ब्राउज़र पर एडोब पीडीएफ के साथ कंप्यूटर पर नहीं खुल रहा है इसलिए मैं फायरबग से जांच नहीं पा रहा हूं।

दूसरा 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")); 
    } 
} 

के ऊपर एक के लिए मैं मिल लास मॉड तारीख जैसे-

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

} 
} 

और से तीसरी विधि मुझे यह पसंद है -

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

मैं उलझन में हूं कि कौन सा सही है। मुझे लगता है कि पहला सही है। किसी भी सुझाव की सराहना की जाएगी ..

उत्तर

4

कोड के पहले टुकड़ा, पीडीएफ फाइल के मेटाडाटा से तारीख निकालता है, जबकि दो अन्य लोगों को वेब सर्वर द्वारा लौटाए गए HTTP हेडर से जानकारी मिलती है। यदि आप जानना चाहते हैं कि दस्तावेज़ कब बनाया गया था/संशोधित किया गया था तो पहला सबसे अधिक सटीक है।

11

सबसे अच्छा विकल्प तीसरा एक है - connection.getLastModified(), क्योंकि यह सबसे आसान उपयोग करने वाली विधि है और इसमें उच्चतम स्तर का अमूर्तता है। बाकी सभी अमूर्तता के निचले स्तर पर हैं: पहला कच्चे प्रतिक्रिया को पढ़ता है, और दूसरा कच्चा हेडर पढ़ता है। तीसरा हेडर पढ़ता है और इसे लंबे समय तक परिवर्तित करता है।

आउटपुट के बीच अंतर समय क्षेत्र के कारण है। new Date() का उपयोग करके आप वीएम डिफ़ॉल्ट टाइमज़ोन का उपयोग करते हैं। कैलेंडर को प्राथमिकता दें, या सबसे अच्छा - Joda समय DateTime जो कस्टम समय क्षेत्र समर्थन करते हैं।

+0

ताकि आप तीसरी विधि मैं सही LastMod तिथि हो रही है साथ हैं .. के रूप में मैं कर रहा हूँ इसे समझने में सक्षम नहीं है ... – ferhan

+0

हाँ, मेरा अपडेट देखें – Bozho

0

अंतिम संशोधित तिथि जीएमटी (RFC 2822) में किया जाना चाहिए, ताकि आप इस तरह इसे पाने मिलना चाहिए:

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
Long dateTime = connection.getLastModified(); 
connection.disconnect(); 
ZonedDateTime urlLastModified = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateTime), ZoneId.of("GMT")); 
संबंधित मुद्दे