服务客户端日期时间时区偏移兼容性问题

发布于 2024-10-24 18:10:57 字数 737 浏览 4 评论 0原文

我正在尝试使用 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 的数据。只有当我在查询中提供偏移量时,我才能获得数据中的正确时区。

I'm attempting to communicate with a Java webservice via a .NET application, using a Visual Studio Service reference (System.ServiceModel namespace classes). I've found that whenever it serializes a DateTime value it does not specify the offset. The problem is two fold:

  1. I can't figure out how to create a DateTime object with a specific time zone. I can create a DateTimeOffset that will accomplish this, but the service client is expecting a DateTime object.
  2. When the DateTime object is serialized, it does not include the time zone offset.

To elaborate on issue #2, the XML that the service expects for the timestamp object is as follows:

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

However, the XML that I see when tracing the .NET app is as follows:

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

The web service requires the time zone, because the underlying data is tracked in GMT-0. The data that is returned is in daily intervals, so if I don't specify a time zone then I get data back for GMT-0. Only when I provide the offset in the query do I get the in the data correct time zone.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无风消散 2024-10-31 18:10:57

建议:将所有 DateTimeOffset 值转换为 UTC 格式的 DateTime 值并将其提交到 Web 应用程序。

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;
}

从这个页面:通用转换方法

希望这有帮助。

Suggestion: convert all your DateTimeOffset values to DateTime values in UTC and submit them to the 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;
}

From this page: A General-Purpose Conversion Method

Hope This Helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文