2009-08-15 16 views
1

スタックオーバーフローのスクリーンスクレーパーを作成しています。私が書いているビットは、HTMLをとり、すべての情報をモデルオブジェクトに入れます。私は答えから情報を解析する間に少し気にしました。スタックからの非標準日付文字列の解析.NET DateTimeへのオーバーフロー

問題は、絶対時間を記述するためにStackOverflowが使用する日付形式です。 DateTime.Parseは動作しません。私はDateTime.ParseExactで騙してみましたが、私は成功しませんでした。どちらも、FormatException

投げるここではいくつかの背景があります:

あなたは答えのソースHTMLを見れば、あなたはこれを取得:

<div id="answer-{id}" class="answer"> 
    <!-- ... --> 
      answered <span title="2009-06-18 13:21:16Z UTC" class="relativetime">Jun 18 at 13:21</span> 
    <!-- ... --> 
</div> 

絶対時間は、スパンのタイトル属性に格納されていることに注意してください。私は、CodePlexのHTML Agility Packを使用して要素にアクセスし、属性の値を抽出しました。

今、"2009-06-18 13:21:16Z UTC"を.NET DateTimeオブジェクトにする方法が不思議です。

Regexesなどを使わずにこれをやってみたいですが、プロジェクト全体がハッキーで不安定なので、気にしません!

最後に、私はこれらの理由のためのデータ・ダンプを使用することはできません:私はBitTorrentのを使用することはできません

  1. 。これまで
  2. できれば、ネット接続にはファイルが大きすぎます。
  3. 少し古いです。
  4. これは楽しいことではありません。
+0

バグレポートはMeta.StackOverflow.com http://meta.stackexchange.com/questions/14684/data-dump-formats-time-incorrectlyに追加されたこの質問のので –

+0

あなたは可能見てみたい:http://stackoverflow.com/api/userquestions.html?userid=41981 &page = 1&pagesize = 10&sort = recent、http://stackoverflow.com/api/userquestions.json?userid=41981&page=1&pagesize=10&sort=recent **警告:これらのURLを考慮してください**プレアルファ**、サイトの作者によって** **これらの言及はありませんでした。 –

+0

@Brad Gilbert:バグレポートをありがとう。私は1つを考えていたが、それはデザインであるかもしれないと思った。それがバグだと思うのは私だけではないことを知っておいてください;)。また、JSONクエリは興味深いようです - 私はそれに回帰するときに私は詳細を見てみましょう。 –

答えて

4

"Z""UTC"と同じDateTimeの文字列が冗長であるようです。

あなたは文字列から"UTC"を削除する場合は、Parse作品:

System.DateTime.Parse("2009-06-18 13:21:16Z") 
{18.06.2009 15:21:16} 
    Date: {18.06.2009 00:00:00} 
    Day: 18 
    DayOfWeek: Thursday 
    DayOfYear: 169 
    Hour: 15 
    Kind: Local 
    Millisecond: 0 
    Minute: 21 
    Month: 6 
    Second: 16 
    Ticks: 633809352760000000 
    TimeOfDay: {15:21:16} 
    Year: 2009 
+0

それをありがとう - それは完全に動作します。私は自分自身を蹴っている;) –

2

さて、あなたはこのために正規表現を使用しないと思いますが、私はフォーマットであることを考えるだけで、「U」は、ここで説明:http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

をのでParseExactは(いくつかのマイナーな仕事で)それを受け入れる必要があります。

+3

UTCはなぜですか? ZはZuluまたはUTCを意味しないのですか?それは省略されるべきであるように思えます。 – tvanfosson

+0

ただ取り外す。私は「ズールー」と「UTC」の違いについてコメントするのに十分な時間帯についてはわかりません:) –

+1

はい、「Z」と「UTC」は同じものを指します。 –

1

私がやりなさい魔法がここにタイムゾーン(Z UTC)と一致することが判明、しかし、彼らはすべてUTCだと仮定すると、これは取得する必要がありますあなたが開始しました:

string d = "2009-06-18 13:21:16Z UTC"; 
    CultureInfo provider = CultureInfo.InvariantCulture; 
    string format = "yyyy-MM-dd HH:mm:ssZ UTC"; 
    DateTime dt ; 
    if(DateTime.TryParseExact(d,format,provider,DateTimeStyles.AssumeUniversal,out dt) { 
      //use dt; 
    } else { 
     //bail out, error. 
    } 
関連する問題