【问题标题】:Get the Last Modified date of an URL获取 URL 的最后修改日期
【发布时间】:2011-11-03 17:27:27
【问题描述】:

我有三个代码。这是我获得任何 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 而不是在浏览器中打开时。它正在计算机上而不是浏览器上使用 Adob​​e 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

我不知道哪个是正确的。我觉得第一个是对的。任何建议将不胜感激..

【问题讨论】:

    标签: java


    【解决方案1】:

    最好的选择是第三种——connection.getLastModified(),因为它是最容易使用的方法,并且具有最高的抽象级别。其余的都在较低的抽象级别:第一个读取原始响应,第二个读取原始标头。第三个读取标题并将其转换为long。

    输出之间的差异是由于时区。使用 new Date() 您使用 VM 默认时区。首选日历,或者最好的 - joda-time DateTime,它支持自定义时区。

    【讨论】:

    • 所以你确定第三种方法我是正确的 LastMod Date.. 因为我无法弄清楚......
    【解决方案2】:

    第一段代码从 PDF 文件的元数据中提取日期,而另外两段代码从 Web 服务器返回的 HTTP 标头中获取信息。如果您想知道文档的创建/修改时间,第一个可能更准确。

    【讨论】:

      【解决方案3】:

      最后修改日期应该是 GMT (RFC 2822) 所以你应该得到它:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-26
        • 2021-11-16
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        相关资源
        最近更新 更多