.Net でのタイムゾーンをまたがる日付のみの日付の処理

StackOverflow https://stackoverflow.com/questions/79774

  •  09-06-2019
  •  | 
  •  

質問

わかりました - 少し一口。したがって、私が抱えている問題はこれです - 有効期限の日付を保存する必要があります のみ 日付部分は必須ですが、タイムゾーンの変換は望んでいません。たとえば、有効期限を「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 のアイデアが気に入っており、優れた機能を実現します。

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