URL的上次修改日期

时间:2012-10-30 17:31:25

标签: c# .net

我正在尝试获取url的LastModified日期,但它总是返回Today(当前日期)。我检查了很多网址,但结果是一样的。我尝试了winform和web应用程序。

这是我的代码。请帮我解决。

  Uri myUri = new Uri(TextBox1.Text);

  // Creates an HttpWebRequest for the specified URL. 
  HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri);
  HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

  if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
       Console.WriteLine("\r\nRequest succeeded and the requested information is in the response , Description : {0}", myHttpWebResponse.StatusDescription);

      DateTime today = DateTime.Now;

      // Uses the LastModified property to compare with today's date.         
      if (DateTime.Compare(today, myHttpWebResponse.LastModified) == 0)
           Console.WriteLine("\nThe requested URI entity was modified today");
      else
      {
           if (DateTime.Compare(today, myHttpWebResponse.LastModified) == 1)
               Console.WriteLine("\nThe requested URI was last modified on:{0}", myHttpWebResponse.LastModified);

          // Releases the resources of the response.
          myHttpWebResponse.Close(); 
      }

2 个答案:

答案 0 :(得分:2)

this explanation

  

如果您的网站使用纯HTML文件,则“Last-Modified”只是HTML文件的时间戳。但是,如果您有从数据库中获取数据的动态页面,那么事情就会复杂一些。服务器不知道您如何生成数据或者如何从上次加载数据时更改数据。

因此,从大多数Web服务器来看,“上次修改”日期将是页面呈现的日期,因为A)配置服务器以了解数据是否已更改是许多人赢得的额外工作通常,数据已经改变了。

答案 1 :(得分:0)

这是一个显示BOTH html和shtml(服务器解析)网页的Last-Modified日期/时间的解决方案。我还将包括一个php解决方案。让我们从html和shtml开始。对于大多数服务器,html不是服务器解析的,因此当页面发送给您时,传输包含Last-Modified变量。但是对于服务器解析的页面,例如shtml,该变量不会被发送。相反,页面设计者应该使用SSI语句来提供Last-Modified信息,该信息在发送页面之前由服务器处理。

以下是如何以任何方式处理页面,如支持Javascript的直接html或SSI支持的shtml。

<p>Last modified:
<!--#config timefmt="%m/%d/%Y %T" --><!--#echo var="LAST_MODIFIED" -->
<script type="text/javascript" language="JavaScript">
<!--
if(Last-Modified !== undefined)
{
document.write(document.lastModified)
}
//-->
</script></p>

无条件输出“Last modified:”字符串。然后,在服务器解析的情况下,注释使用#config timefmt AND #echo SSI-statments提供日期/时间。但如果这不是服务器解析的,它仍然只是一个评论。同时,对于服务器解析,不发送称为Last-Modified的变量,因此Javascript测试Last-Modified是否未定义,并且仅在定义时执行某些操作,而不是用于服务器解析。注意:在评论中,请勿在! - 之后留空,并且在 - &gt;之前留空:。

现在反面:直接html,而不是服务器解析。 SSI语句未被执行,因此评论仅仅是评论。但是定义了Last-Modified,所以现在Javescript开始运行并使document.write提供document.lastModified值。

您可以使用格式化,但上面显示的是基本代码。

如果Last-Modified!== undefined的测试不起作用,那么你可以使用更长的方法:

<p>Last modified:
<!--#config timefmt="%m-%d-%Y %T" --><!--#echo var="LAST_MODIFIED" -->
<script language="JavaScript">
<!--
var mydate=new Date();
var year=mydate.getFullYear();
var month=mydate.getMonth()+1;
var day=mydate.getDate();
var hours=mydate.getHours();
var minutes=mydate.getMinutes();
var now='';
var testnow='';
var testlast=document.lastModified;
if (month<10) month="0"+month;
if (day<10) day="0"+day;
if (hours<10) hours="0"+hours;
if (minutes<10) minutes="0"+minutes;
now=(month + '/' + day + '/' + year + ' ' + hours + ':' + minutes + ':');
testnow=(now.substring(6,10)+now.substring(0,16));
testlast=(testlast.substring(6,10)+testlast.substring(0,16));
  if (testlast && (testlast < testnow))
  { document.write(" "+document.lastModified); }
//-->
</script></p>

此方法比较current-date和document.lastModified的截断版本。两个数量的格式必须相同,子字符串函数将丢弃“秒”。当document.lastModified不存在时,大多数浏览器所做的是替换当前日期。

现在为php解决方案:

<p>Last modified:
<?php
date_default_timezone_set('America/Los_Angeles');
echo " " . date ("m/d/y.", filemtime(__FILE__));
?>
</p>

您也可以在此处调整格式。实际上,您可能需要为服务器的位置设置时区。 Web搜索“支持的时区的PHP列表”。