2

さて、Twitter フィード XML の日付/時刻を読み取ろうとしていますが、現在は次の形式になっています: Fri May 03 15:22:09 +0000 2013 しかし、私の C# は日付/時刻型として読み取っていません。

これは私が得たものです:

  ArticleDate = DateTime.Parse(d.Element("created_at").Value)

created_at には次が含まれます: Fri May 03 15:22:09 +0000 2013 形式

4

5 に答える 5

6

気をつけて。返される時間は UTC です。ローカル タイム ゾーンが結果に影響を与えることを意図せずしてしまう可能性があります。

たとえば、他の回答の1つがこのコードを提案しました:

DateTime dt = DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                  "ddd MMM dd HH:mm:ss zzz yyyy",
                                  CultureInfo.InvariantCulture);

アリゾナ (UTC-7) にある私のコンピューターでのこの結果は次のとおりです。

5/3/2013 8:22:09 AM   (dt.Kind == DateTimeKinds.Local)

これは私の現地時間の正しい瞬間ですが、私に与えられたものではありません.Kind。物件に細心の注意を払わない限り、おそらくあなたが期待しているものではありません.

代わりに、次の操作を実行できます。

DateTime dt = DateTime.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                  "ddd MMM dd HH:mm:ss zzz yyyy",
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.AdjustToUniversal);

これは以下を返します:

5/3/2013 3:22:09 PM   (dt.Kind == DateTimeKinds.Utc)

あなたが始めたものとどちらがよりよく一致しますか。

これは、Twitter から返される値が常に UTC であることを前提としています。彼らの FAQ によると、そのようです。しかし、オフセットが与えられているので、提供されたオフセットを使用する方が正しいかもしれないと主張する人もいるでしょう。オフセットが変更された場合でも、コードを壊したくありません。したがって、DateTimeOffsetクラスを使用する方が適切です。

DateTimeOffset dto = DateTimeOffset.ParseExact("Fri May 03 15:22:09 +0000 2013",
                                               "ddd MMM dd HH:mm:ss zzz yyyy",
                                               CultureInfo.InvariantCulture);

その結果は次のとおりです。

5/3/2013 3:22:09 PM +00:00
于 2013-05-13T16:12:23.103 に答える
1

Twitter API XML からのこの特定の日付形式の実際のコード修正は以下のとおりです。

using System.Globalization;

CultureInfo enUS = new CultureInfo("en-US");                
DateTime dateValueOut;
string userCreated = "Fri May 03 15:22:09 +0000 2013"; 

bool isDateFormatted = DateTime.TryParseExact(userCreated,"ddd MMM dd HH:mm:ss zzzz yyyy",enUS,DateTimeStyles.None, out dateValueOut);

if (isDateFormatted == true)
{
    DateTime formattedDateTime = dateValueOut;                    
}
于 2015-08-24T13:22:57.527 に答える
1

DateTime.TryParseExactを次のように使用します。

if (DateTime.TryParseExact("Fri May 03 15:22:09 +0000 2013",
                                              "ddd MMMM dd HH:mm:ss zzz yyyy",
                                              CultureInfo.InvariantCulture,
                                              DateTimeStyles.None,
                                              out ArticleDate))
            {
                //date is fine
            }
于 2013-05-13T12:20:29.197 に答える