2011-03-21 73 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

希望这有助于。