質問

このコード行は私のコンピュータ (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 を返すようにその行を変更すると、試用期間の期限がいつ切れたかが分からないことを除けば、アプリは完全に正常に動作します。

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top