質問
わかりました - 少し一口。したがって、私が抱えている問題はこれです - 有効期限の日付を保存する必要があります のみ 日付部分は必須ですが、タイムゾーンの変換は望んでいません。たとえば、有効期限を「2008 年 3 月 8 日」に設定した場合、タイムゾーンに関係なく、その値をクライアントに返したいと考えています。それを日付としてリモートすることの問題は、「2008年3月8日00:00」として保存/送信されることです。このシナリオをきれいに処理するために?明らかに、文字列として送信すると機能します。他に何か ?ありがとう、イアン
解決
次のような、必要な詳細へのアクセスを提供する構造体 Date を作成できます。
public struct Date
{
public int Month; //or string instead of int
public int Day;
public int Year;
}
これは軽量で柔軟性があり、完全に制御できます。
他のヒント
どのリモート処理テクノロジを指しているのかわかりませんが、これは WCF の本当の問題です。WCF では現在、DateTime を xs:DateTime としてシリアル化することしかサポートされておらず、タイムゾーンに関心がない日付のみの値には不適切です。
.NET 3.5 では、新しい DateTimeOffset 型が導入されています。これは、タイムゾーン間で DateTime を転送するのに適していますが、日付のみのシナリオには役に立ちません。
理想的には、WCF は、ここで要求されているように、日付をシリアル化するために xs:Date をオプションでサポートする必要があります。
http://connect.microsoft.com/wcf/フィードバック/ViewFeedback.aspx?FeedbackID=349215
私は次のようにします:メモリ内に日付がある場合、またはファイルに保存されている場合は、常に UTC の DateTime になります。ユーザーに日付を表示する場合、それは常に文字列です。文字列と DateTime の間で変換するときは、タイム ゾーンの変換も行います。
こうすることで、ロジック内でタイム ゾーンを扱う必要がなく、プレゼンテーション内でのみ処理できます。
UTC時間として送信できます
dateTime1.ToUniversalTime()
タイムスタンプ文字列として送信するのが最も迅速/簡単な方法だと思いますが、ロケールに強制的に時刻変換の発生を停止させることも考えられます。
これまでアプリでこれを処理した最も簡単な方法は、日付を yyyy-mm-dd 形式の文字列として保存することです。これは明確であり、何かによって自動的に翻訳されることはありません。
はい、痛いです...
それを文字列として送信し、必要に応じて日付型に変換して戻してみてはいかがでしょうか。こうすることで、異なるタイムゾーンに変換されることはありません。単純にする。
編集:私は Struct のアイデアが気に入っており、優れた機能を実現します。