0

このコード行は、私のコンピューター (64 ビット Win7) で動作します。VM の XP 32 ビットでテストしました。それは正常に動作します。

static bool HasExpire { get { return DateTime.Now >= DateTime.Parse("10/20/2010"); } }

ただし、クライアント マシンでは次の例外がスローされます。

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

[FormatException: String was not recognized as a valid DateTime.]
   System.DateTimeParse.Parse(String s,
       DateTimeFormatInfo dtfi,
       DateTimeStyles styles) +2838082

VM では日付を解析できるのに、クライアント マシンでは日付を解析できないのはなぜですか? 日付はハードコードされています。これがどのように発生するのかわかりません。クライアントが 3.5 であることを確認し、その行を変更して常に false を返すようにすると、試用期間がいつ切れたかがわからないことを除いて、アプリは完全に正常に動作します。

4

3 に答える 3

5

DateTime.Parseロケールに依存するため、FormatException が予期せずスローされる場合があります。MSDN ページから:

書式設定は、現在の DateTimeFormatInfo オブジェクトのプロパティの影響を受けます。既定では、コントロール パネルの [地域と言語のオプション] 項目から派生します。

むしろ使用したいかもしれませんDateTime.ParseExact

于 2010-10-02T05:30:26.633 に答える
1

他のコンピューターは、リージョンが異なるため、おそらく日付をdd / MM/yyyyとして解析しようとしています。日付を「2010-10-20」と入力すると、解析できるはずです。

于 2010-10-02T05:36:54.093 に答える
0

AntiDogsは、問題の正確な原因を示します。ただし、ParseExactを使用すると、正確な形式がわかり、クライアントコードがこの形式に準拠していることが保証されます。

私たちのシステムでは、バグ要件のために異なるクライアントが、2つの異なるカルチャのサーバーコンポーネントにDateTime値を送信します。私は次のコードを使用してそれを処理します:

private DateTime ParseWithDifferentCultures(string source)
{
    DateTime result;
    if (DateTime.TryParse(source, out result) 
        || DateTime.TryParse(source, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out result))
        return result;

    thrown new FormatException("Unrecognised DateTime format.");
}

ここでは、最初に現在のカルチャ情報を使用して解析を試み、次に不変のカルチャ情報を使用して解析を試みます。もちろん、それは理想的ではありませんが、私たちのニーズに完全に適合します。

于 2010-10-02T07:20:32.300 に答える