2
DateTime res;
String s;

s = "Wed, 28 Mar 2012 10:30:52 GMT";
DateTime.TryParse(s, out res);
Console.WriteLine(s + " => " + res);

s = "Fri, 15 May 2009 20:10:57 GMT";
DateTime.TryParse(s, out res);
Console.WriteLine(s + " => " + res);

出力:

Wed, 28 Mar 2012 10:30:52 GMT => 01/01/0001 00.00.00
Fri, 15 May 2009 20:10:57 GMT => 15/05/2009 22.10.57

一部の日付でしか機能しないのはなぜですか? 明らかに、同じマシンで同時にそのコードを実行しました。

4

4 に答える 4

2

あなたが取り組んでいる文化の長い日付形式は、おそらく @VimalStan によって提案されている完全な月名のみを受け入れると思います (いずれかの方法でこれを確認しましたか?)。

あなたがやろうとしていることも (IMHO) 受け入れる必要がありますが、さまざまな文化にこのような「癖」がある可能性があることは承知していますたとえば、おそらく「mar」は一部の文化ではあいまいですか? (そして、あなたの文化ではあいまいではないかもしれませんが...おそらく、ある文化から別の文化にぶら下がっているコードがあります...文化ルールがどのように実装されているかさえわかりません。有効な提案でさえ...しかし、特定の文化が常に期待どおりに動作するとは限らないという私の指摘は、公正だと思います)。

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspxを使用して、.NET コンテキストが実行されているカルチャを確認します。Windows ユーザー プロファイルが実行されているコンテキストを確認できます。コントロール パネル (Win 7 の「地域と言語」など) から、長い日付形式を確認してください。

あなたの例は、長い日付形式が「dddd、d MMMM yyyy」である私のPCで正常に動作します。私はオーストラリアにいて、en-au を使用しています。

テストとして、en-au "English (Australia) をカルチャとして使用してみてください (コントロール パネルを使用するか、上記のcurrentcultureリンクに従って [CurrentCulture プロパティを明示的に設定する] の見出しで明示的に設定し、コードが次のように機能するかどうかをテストします。期待される。

期待通りに機能する場合、問題は、たとえば私の文化よりも(そしてたとえばあなたが期待したものよりも)、あなたの文化が構文解析において少し厳密であることを意味していると思います。したがって、月全体を確実に渡すか、ここで を使用して別の回答に従って独自の特定の解析パターンを指定する必要がある場合がありますTryParseExact()

于 2013-03-29T08:17:51.933 に答える
1

これを試して:

DateTime res;
String s = "Wed, 28 Mar 2012 10:30:52 GMT";
DateTime.TryParseExact(s, "R", CultureInfo.InvariantCulture, DateTimeStyles.None, out res);

これにより、次のようになります。{3/28/2012 10:30:52 AM}

また、いつ

String s = "Fri, 15 May 2009 20:10:57 GMT";

これにより、次のようになります。{5/15/2009 8:10:57 PM}

于 2013-03-29T08:33:51.127 に答える
1

先日も同じような問題がありましたが、失敗する必要がなかったので非常にイライラしました。

ただし、問題を修正した方法は、DateTime.TryParseExactに移動することでした

次のように使用されます。

// Parse date with no style flags.
dateString = " 5/01/2009 8:30 AM";
if (DateTime.TryParseExact(dateString, "g", enUS, 
                          DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", 
                             dateString, 
                              dateValue, 
                             dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

切り替え解析が失敗したことがないので

于 2013-03-29T08:07:06.857 に答える
0

これは推測にすぎませんが、おそらく問題は、イタリア語で「Mar」が「Martedì」(火曜日)の語頭であるため、「Wed, 28 Mar 2012 10:30:52 GMT」が「水曜日のマルテ/火曜日」というのはばかげています。

反例として、私は 2013 年に Martedì/Tuesday 28 を探しました。これは、曜日を月に置き換えて機能します。

2013 年 3 月 28 日 10:30:52 GMT => 28/05/2013 12.30.52

明らかに、他のロケールでは機能しません。

于 2013-03-29T08:30:19.527 に答える