2011-03-21 74 views
1

我正在嘗試使用Visual Studio服務引用(System.ServiceModel命名空間類)通過.NET應用程序與Java webservice進行通信。我發現每當它序列化DateTime值時,它都不會指定偏移量。問題是兩倍:服務客戶端日期時間時區偏移兼容性問題

  1. 我想不出如何創建具有特定時區的DateTime對象。我可以創建一個將完成此操作的DateTimeOffset,但服務客戶端需要一個DateTime對象。
  2. 當DateTime對象被序列化時,它不包含時區偏移量。

要闡述的問題#2,該服務預計,時間戳對象的XML如下:

<startDate>2011-03-18T00:00:00-07:00</startDate> 
    <endDate>2011-03-19T00:00:00-07:00</endDate> 

但是,我看到跟蹤.NET應用程序如下:當XML :

<startDate>2011-03-18T00:00:00</startDate> 
    <endDate>2011-03-19T00:00:00</endDate> 

Web服務需要時區,因爲基礎數據是以GMT-0進行跟蹤的。返回的數據是每隔一段時間,所以如果我沒有指定時區,那麼我會爲GMT-0返回數據。只有當我在查詢中提供偏移量時,我才能得到數據正確的時區。

回答

1

建議:將所有DateTimeOffset值轉換爲UTC中的DateTime值並將它們提交給webapp。

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) { 
    if (dateTime.Offset.Equals(TimeSpan.Zero)) 
     return dateTime.UtcDateTime; 
    else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))) 
     return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local); 
    else 
     return dateTime.DateTime; 
} 

從這個頁面:A General-Purpose Conversion Method

希望這有助於。