2011-02-07 10 views
2

抽象的な問題を想像してください。日付形式とクライアント - サーバーの対話

サーバー(S)とやりとりするクライアント(C)があります。日付変数を変更します(d)。

サーバーはフランス語または英語、クライアントも可能です。

フランス語クライアント(「31/12/2011」)から英語版サーバーに送信された日付(「12/31/2011」)は認識できません。およびその逆。

.NETでこのような問題を回避する方法。

答えて

4

あなたはクライアントとサーバーの両方を管理していますか?そうであれば、形式と文化に同意してください。私は不変の文化を示唆し、明示的に双方がそれに固執するようにします。

あなたは非常に簡単に、インバリアントカルチャを使用して.NETで解析してフォーマットすることができます - IFormatProviderパラメータを含めToStringParse/TryParse過負荷を探します。

+0

私たちは両方を制御します。しかし、正確には「両側はそれに固執している」ということです。私は理解していたように、フランスのクライアントUIから受け取ったデータをフランス語形式(31/12)で保存し、不変の文化(??/??)で変換し、DBの文化に格納して、不変の文化(??/??)、それを英語のクライアントUIにローカル(英語)形式(12/31)で送信しますか? – serhio

+0

DBに独自の日付形式があると、DBのインストールされたローカルカルチャに "DateTime"タイプのフィールドを強制的に適用できますか?フランス語のSQL Serverは "dd/mm/yyyy "形式なのか...? – serhio

+1

@serhio:DateTime変数/列の値とそのテキスト表現の違いを理解する必要があります。これは、整数の値と基数10の表現の差と同じです。数字「20」は、「20」または「0x14」として表すかどうかにかかわらず同じ値です。彼らは値を伝えるだけの方法です。データを「フランス語形式」で「保管」しないでください。これを 'DateTime'として保存します。ユーザーに表示する必要がある場合は、ユーザーのカルチャーに書式を設定します。マシン・マシン通信では、カルチャ不変式を使用します。 –

1

Ticksプロパティを使用してクライアントとサーバーの間で送信します。これは数字であり、日付の書式をどのように設定しても同じです。

+0

良いアイデアだが、1000個のセパレータのために整数でも異なったフォーマットが可能である。 – serhio

+0

これは、文化不変の日付文字列よりもログファイルでデバッグするのがずっと難しくなります... –

0

日付を文字列として送信する理由はありますか?最も良いことは、DateTimeデータ型を使用して日付を共有することです。なんらかの理由で文字列を送信できるのであれば、日付の値をLongDateFormatに変換してから転送するのが最善です。それは意味のある日付を得るためにもう一方の端で解析できます。