【问题标题】:Service Client DateTime Time Zone Offset Compatability Issue服务客户端日期时间时区偏移兼容性问题
【发布时间】:2011-03-21 16:32:23
【问题描述】:

我正在尝试使用 Visual Studio 服务引用(System.ServiceModel 命名空间类)通过 .NET 应用程序与 Java Web 服务进行通信。我发现每当它序列化 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 的数据。只有当我在查询中提供偏移量时,我才能获得数据正确的时区。

【问题讨论】:

    标签: .net datetime service wcf-client


    【解决方案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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2013-02-02
      • 2011-10-24
      • 1970-01-01
      相关资源
      最近更新 更多