分配在我WPF .NET客戶端應用程序我分配一個DateTime
變量的當前時間值:保持.NET DateTime值在服務器客戶端
class MyClass
{
public DateTime CreatedDate {get; set;}
}
MyClass myClass = new MyClass();
myClass.CreatedDate = DateTime.Now;
任務後我對象發送到位於歐洲的WCF服務(UTC + 1)將對象保存在數據庫中。如果客戶和服務在同一TimeZone
沒有問題。但是,如果我更改TimeZone
,例如我的客戶端位於(UTC-6)並且服務位於(UCT + 1),則該服務將讀取CreatedDate值,因爲它是DateTime.Now服務(UCT + 1) (UCT-6)在客戶端分配。如果在客戶端(UTC-6)設置了CreatedDate,則2014年10月31日的20:00服務中將存儲爲(UTC + 1)01/11/2014 at 01:00並且此影響我係統上的一些進程。
這不是我想要的行爲,我希望服務始終按照客戶提交的方式存儲該日期。
我有機會爲服務器和客戶端的代碼,我試圖設置分配CreatedDate
當:沒有運氣
myClass.CreatedDate = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Unspecified);
。我能想到的唯一解決方案是使用字符串而不是DateTime,但這意味着代碼中的很多更改。任何人都知道一種方法來忽略TimeZone
設置?
你爲什麼不把'DateTime'存儲在UT中?每個客戶端都將「看到」當地時間(當您在可視化中轉換爲字符串時,例如您在StackOverflow中看到的內容)。作爲替代方法(保留每個時區的時區),您可以使用「DateTimeOffset」。總的來說......從來沒有想過在有更好的類型時使用字符串...... – 2014-10-20 13:48:03
記錄您的服務並聲明它只應發送utc-values,並且只會返回utc值。讓用戶界面處理轉換。看看http://nodatime.org/這是甜蜜的甜美音樂,以datetime損壞的耳朵... – sisve 2014-10-20 13:50:34
感謝您的提示!然而,我有點失去了UTC。如果(UTC + 6)中的客戶端在20:00在31/10/2014存儲了CreatedDate,則服務以UTC讀取的值仍然是01/11/2014在00:00,對吧? – CiccioMiami 2014-10-20 13:59:53