2

URL の LastModified 日付を取得しようとしていますが、常に今日 (現在の日付) が返されます。多くの URL を確認しましたが、結果は同じです。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(); 
      }
4

2 に答える 2

2

この説明によると:

WebサイトがプレーンなHTMLファイルを使用している場合、「Last-Modified」はHTMLファイルのタイムスタンプにすぎません。ただし、たとえばデータベースからデータをフェッチする動的ページがある場合は、少し複雑になります。サーバーは、データをどのように生成しているか、またはデータが最後にロードされたときからどのように変更できるかを認識していません。

したがって、最近のほとんどのWebサーバーでは、「最終変更日」の日付がページがレンダリングされた日付になります。これは、A)データが変更されたかどうかを知るようにサーバーを構成することは、多くの人が行うことのない余分な作業であるためです。 、およびB)データ変更されていることがよくあります。

于 2012-10-30T20:36:11.563 に答える
0

これは、html と shtml (サーバーで解析) の両方の Web ページの最終更新日時を表示するためのソリューションです。また、php-solution も含めます。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 と #echo SSI ステートメントを使用して日付/時刻を提供します。ただし、これがサーバーで解析されない場合は、単なるコメントのままです。一方、サーバー解析の場合、Last-Modified として知られる変数は送信されないため、Javascript は Last-Modified が未定義かどうかをテストし、それが定義されている場合にのみ何かを実行しますが、これはサーバー解析用ではありません。注意: コメントでは、!-- の後に空白を残さないでください。また、--> の前に空白を残してください。

反対に、サーバーで解析されていない、ストレートな 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>

このメソッドは、現在の日付と document.lastModified の切り詰められたバージョンを比較します。両方の数量の形式は同一である必要があり、部分文字列関数は「秒」を削除します。document.lastModified が存在しない場合にほとんどのブラウザーが行うことは、現在の日付を置き換えることです。

PHPソリューションの場合:

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

ここでもフォーマットを調整できます。実際、サーバーの場所のタイムゾーンを設定したい場合があります。「サポートされているタイムゾーンのphpリスト」をWeb検索します。

于 2014-01-04T17:30:45.227 に答える