2012-03-26 4 views
3

これは非常に簡単な(うまくいけば)質問です。私は.NETでDateTime変換を扱うのが初めてです。WTC/.NETのC#UTC DateTimeクエリ

私はDateTimeプロパティを持つWCFサービスを持っています - それをBookingDateと呼んでください。

誰かが渡し形式で私のWCFサービスへの:

<a:BookingDate>2012-03-26T17:03:00-04:00</a:BookingDate> 

UTC(リスボン、ロンドン、ダブリン)のタイムゾーンに設定されている上に座っているサーバー。

Iは、データベース内の対応する値を格納すると、それがために値を設定します。私は想定

2012-03-26 22:03 

は、私は(WCFシリアライズ/デシリアライズプロセスの一部として).NETフレームワークこと誤っ思います2012-03-26 21:03

私の質問はこれです:

私は期待していた(上記のように、4時間のオフセットをマイナスがあるとして)私のためにUTCの純日時にこれをポップだろう私が呼び出す必要があります:

var date = fromClientWCFService.BookingDate.ToUniversalTime(); 

私が期待している21時03分を得るには?

もしそうでない場合は、サーバータイムゾーンではなく、DateTimesをUTCに変換するように私のサービスに指示するWCF設定がありますか?事前に

おかげ

マーク

EDIT:

1つの答えから、私はのDateTimeOffsetを使用することができることを見ることができます。 var offset = DateTimeOffset.Parse("2012-03-26T17:03:00-0400");結果を返すために:次の仕事は、このからでしょうに、次の代わりにDateTime structureを使用しての2012-03-26 21:03

+0

Dupe:http://stackoverflow.com/questions/259005/handling-wcf-deserialization-of-datetime-objects – casperOne

+0

これは確かに詐欺ですか?もしそうなら、私たちはそのようにシャットダウンしなければなりません。 – casperOne

答えて

3

を、あなたはDateTimeOffset structureを使用する必要があります。

DateTimeOffset構造は、日付/時刻を指定した時間(デフォルトではUTCはありません、それはあなたアプリケーションの範囲によって定義されるが、最も一般的なオフセットだUTCからだろう)に沿ってからのオフセットを取り込み、その情報はWCF呼び出しを通って流れます(この型のSQL Serverは2008年以降のdatetimeoffset data typeを持っています)。

実際には、using DateTimeOffset is the preferred methods of dealing with date/time data in almost all situationsです。前のリンクから注意してください:のDateTimeOffset値に対する

これらの用途は、はるかに共通のDateTime値のもの よります。その結果、DateTimeOffsetは、アプリケーション開発のデフォルトの日付と時刻の型である とみなす必要があります。

+0

あなたの答えをありがとう(特にそうすばやく)。上記の私の所見を確認できますか?私が正しい方向にいるかどうかを理解したいのですが、そのように実装したかったのですか? – harrisonmeister

+0

また、残念ながらdatetime - SQL Server 2005 shop ... :( – harrisonmeister

+0

@harrisonmeisterの質問に投稿したデュプリュのリンクを参照してください。 – casperOne

0

サーバーのタイムゾーンがリスボン/ロンドン/ダブリン時間の場合は、UTCではありません。サーバーのタイムゾーンを変更するか、データベースでUTC形式で日付/時刻値を更新する場合は、UTC形式で指定します。

+0

これは、WCFサービスがその日付時刻を現地時間(例えば、リスボン/ロンドン/アイルランド)に変換することを意味しますか? – harrisonmeister

+0

あなたのDateTimeには、実際には「変換」がありません。残念ながら、指定されていない場合は日付が現地時間であると仮定することも好きです。したがって、DBからの日時にはロケール情報が添付されていないため、 .NETはそれがローカルではなく普遍的な時間であると判断します。あなたの値をUTC(.ToUniversalTimeを使用)を使ってDBに入れ、UTCのDateTimeKindで構築します。あなたは一貫性を求めています。 –