2012-03-26 13 views
3

這是一個非常簡單的,(希望)的問題。在.NET中處理DateTime轉換是新手。在WCF/.NET C#UTC日期時間查詢

我有有一個DateTime屬性WCF服務 - 稱之爲BookingDate。

有人經過,爲格式我的WCF服務:

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

,這是坐在被設置爲UTC(里斯本,倫敦,都柏林)的時區的服務器。

當我在數據庫中存儲對應的值,它設置值是:

2012-03-26 22:03 

我假定,我認爲不正確的是,.NET框架(作爲WCF序列化/反序列化過程的一部分)會彈出這個到UTC的淨日期時間對我來說(因爲是負4小時如上偏移)

我期待:2012-03-26 21:03

我的問題是這樣的:我需要調用:

var date = fromClientWCFService.BookingDate.ToUniversalTime(); 

爲了得到21:03我期待的時間?

如果沒有,是否有一個WCF設置告訴我的服務DateTime是否轉換爲UTC,而不是服務器時區?

在此先感謝

馬克

編輯:

從1回答,我可以看到的DateTimeOffset都可以使用。根據這一點,將以下工作:var offset = DateTimeOffset.Parse("2012-03-26T17:03:00-0400");返回結果:2012-03-26 21:03

+0

Dupe:http://stackoverflow.com/questions/259005/handling-wcf-deserialization-of-datetime-objects – casperOne 2012-03-26 20:02:39

+0

這真的是一個愚蠢的?如果是這樣,那麼我們應該關閉它。 – casperOne 2012-03-26 20:32:08

回答

3

除了使用DateTime structure的,你應該使用DateTimeOffset structure

DateTimeOffset結構捕獲從指定的時間偏移量(這不是默認UTC,它是由適用範圍界定,但最常見的偏移是從UTC)一起的日期/時間信息,並且這些信息將流經調用WCF(以及一個數據庫,假設它支持在這種情況下的類型。SQL服務器對datetimeoffset data type 2008年)。

事實上,using DateTimeOffset is the preferred methods of dealing with date/time data in almost all situations的問題。請注意,上一個鏈接:

DateTimeOffset值的這些用法比那些用於DateTime值的 更常見。其結果是,的DateTimeOffset應考慮 應用程序開發的默認日期和時間類型。

+0

謝謝你的答案(尤其是如此之快)。你能否證實我上面的發現。正如在 - 我想了解,如果我是在正確的路線,我想這樣實施它? – harrisonmeister 2012-03-26 19:53:18

+0

而且,不幸的是我只能存儲日期時間 - SQL Server 2005的店... :( – harrisonmeister 2012-03-26 19:54:11

+0

@harrisonmeister見我貼在問題的重複數據刪除的鏈接 – casperOne 2012-03-26 20:03:20

0

如果您的服務器的時區是在里斯本/倫敦/都柏林時間,它不是UTC。你要麼需要改變你的服務器的時區,或當您在數據庫中更新它表達UTC形式的日期/時間值。

+0

這是否意味着WCF服務會將該日期時間轉換爲當地時間(例如里斯本/倫敦/愛爾蘭)? – harrisonmeister 2012-03-26 19:55:18

+0

真的沒有「轉換」正在進行。特定的值,並且是基於其接收到的數據。不幸的是,它也喜歡假定日期是如果有沒有指定本地時間。所以,由於日期時間出你的數據庫的連接到它的locale信息, .NET決定,它是本地的,不具有普遍性,時間表達自己的值作爲UTC(使用.ToUniversalTime)進入數據庫,並與UTC的DateTimeKind構建它的到來了。這應該給你尋求的一致性。 – 2012-03-26 20:33:07