0

ソースからの日付を「02/11/2013」として解析しようとしています

私のアプリケーションでは、ユーザーのカルチャを en-CA または en-FR に設定し、日付形式は「dd/MM/yyyy」または「M/d/yyyy」です。

日付を解析して形式を渡すと、これは機能しますか、それともデータベースに保存した形式に依存しますか?

 if (DateTime.TryParseExact(dateString, Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern, null, System.Globalization.DateTimeStyles.None, out dtResult))
{
    dt = dtResult;
}

今はちゃんと考えられるので、説明が必要です。

「dd/MM/yyyy」または「M/d/yyyy」の形式で渡すと、この形式はソースの形式に関係なく日付になりますか、それともソースが含まれることを日時解析に伝えますかこの形式なので、これを使用しますか?

私がうんざりしているのは、誰かが 1 つの形式でデータベースに保存していて、フランス人が日付と独自の形式を読みたいということです (はい、utc に保存する必要があります)。

4

2 に答える 2

2

ADO.NET は厳密に型指定されています。ほとんどのデータを格納するためのよく知られた型があります。日付の場合、それはDateTime.NET とdatetimeほとんどのデータベース システムにあります。文化について心配する必要がある場合は、データを/ではなく文字列として渡しているため、すでに間違っていますDateTimedatetime

これにより、ここでの懸念が冗長になります。

私がうんざりしているのは、誰かが 1 つの形式でデータベースに保存していて、フランス人が日付と独自の形式を読みたいということです (はい、utc に保存する必要があります)。

DateTime/datetime には形式の概念がないため、単に日付/時刻の値です。文字列データの UI 表示/解析は、完全に分離され、UI に固有のものである必要があります。(日付/時刻について話すとき) UI コードを超えて、DateTime/をdatetime排他的に使用する必要があります。

同様に、整数を格納するときは、 を使用する必要がありますint

于 2013-02-14T07:21:09.873 に答える
0

日付が「02/11/2013」としてのみ保存され、他の文化を識別する情報がない場合、それを適切に解釈する方法を知る方法はありません! en-FR カルチャを持つ人がデータベースに日付を "02/11/2013" として保存し、11 月 2 日を意味し、en-US カルチャを持つ人がその日付を読み取って解釈する可能性があることを心配しているのは、まったくそのとおりです。 2月11日として。

関連性があることがわかっている場合、つまり日付文字列がそのカルチャを使用して生成されたことがわかっている場合にのみ、現在のカルチャを渡す必要があります。

より良いアプローチは、そもそもそのような日付を保存しないことです。日付は、タイムゾーンとInternet Date/Time RFC 3339形式などの形式情報を含む形式で保存することをお勧めします。

または、それができない場合は、少なくとも日付を取得し、データベースに保存する前に必ず en-US カルチャに変換し、データベースから読み取るときにそのカルチャを DateTime.Parse に渡すようにしてください。

日付の .NET XML シリアル化コードは、日付を RFC 3339 形式でシリアル化/逆シリアル化するときに役立ちます。詳細については、この SO 投稿を参照してください

于 2013-02-13T22:10:25.217 に答える