2011-11-03 24 views
18

Tengo tres códigos. Este es el primero en el que obtengo la información de metadatos de cualquier url y en esos metadatos también tengo la fecha LastModified. Si me quedo esta clase entonces consigo la última fecha de modificación de la url como-Obtener la fecha de la última modificación de una URL

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

Primero uno

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

    } 

} 

Pero por segundo ejemplo justo debajo de este cuando corro este código y con el mismo url. Recibo diferente fecha de Última Modificación de esa URL. Cómo asegurarse de cuál es el correcto. Cuando intenté abrir ese pdf en el navegador, en lugar de abrirlo en el navegador. Se está abriendo con Adobe PDF en la computadora que no está en el navegador, por lo que no puedo verificar Firebug.

En segundo lugar rústico y moderno

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

Por la anterior fecha de recibo Las Mod como-

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

En tercer lugar rústico y moderno

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

} 
} 

Y por tercer método lo entiendo así--

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

Confundo cuál es el correcto. Creo que el primero es correcto. Cualquier sugerencia será apreciada ..

Respuesta

4

El primer fragmento de código extrae la fecha de los metadatos del archivo PDF, mientras que los otros dos obtienen la información de los encabezados HTTP devueltos por el servidor web. El primero es probablemente más preciso si desea saber cuándo se creó/modificó el documento.

11

La mejor opción es la tercera - connection.getLastModified(), porque es el método más fácil de usar y tiene el más alto nivel de abstracción. El resto se encuentra en niveles más bajos de abstracción: el primero lee la respuesta sin procesar, y el segundo lee el encabezado sin procesar. El tercero lee el encabezado y lo convierte en largo.

La diferencia entre las salidas se debe a la zona horaria. Con new Date(), usa la zona horaria predeterminada de VM. Prefiere Calendar, o mejor - joda-time DateTime que admite husos horarios personalizados.

+0

Así que está usted seguro de que con el tercer método que estoy recibiendo lastmod Fecha derecho .. Como soy no puede resolverlo ... – ferhan

+0

sí, mira mi actualización – Bozho

0

La última fecha de modificación debe estar en GMT (RFC 2822) por lo que debe recibir conseguirlo así:

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