【问题标题】:Sending DateTime from .Net to Java Web Service将 DateTime 从 .Net 发送到 Java Web 服务
【发布时间】:2010-07-09 15:17:08
【问题描述】:

我在简单的 Outlook 中使用的 Java Web 服务存在一些问题,我正在尝试与此第 3 方 API 集成。问题是 .Net 日期和 Java 日期之间的区别,老实说,我对 Java 不太了解了。我的问题是 API 期望格式为 yyyyMMddHHmmss 的日期,这很好,但是当我尝试使用 DateTime.ParseExact 之类的东西创建它时,我收到一条错误消息,指出“字符串未被识别为有效的 DateTime”。不太确定我作为 Google 的哪些选择这次并没有真正帮助我。

【问题讨论】:

  • 从您的问题中不清楚 - 您是在 .NET 端寻求解析、从 .NET 端格式化还是在 Java 端寻求帮助?请提供一个示例字符串和您尝试过的代码。
  • 您是否捕获了导致无法查看其实际外观的字符串?如果您的格式定义正确,ParseExact 应该可以工作,无论是什么格式。
  • 你能发布你的解析代码吗?
  • 这个网络服务真的期望日期作为字符串而不是xsd:datetime吗?
  • 网络服务声明它需要一个 DateTime(这就是它所要求的),但文档声明它应该是 yyyyMMddHHmmss 格式,这就是我一直尝试使用 ParseExact 的原因。 @Jon Skeet,对不起,如果我不清楚,我正在.Net 客户端上使用 Java Webservice。

标签: c# java .net web-services


【解决方案1】:

我认为做错了什么,在使用精确解析之前我没有以正确的格式格式化日期:

string fd = new DateTime(2010, 07, 10, 01, 00, 00).ToString();
string sd = new DateTime(2010, 07, 10, 23, 59, 59).ToString();

fd = String.Format("{0:yyyyMMddHHmmss}", DateTime.Parse(fd));
sd = String.Format("{0:yyyyMMddHHmmss}", DateTime.Parse(sd));

api.searchMessage(null,
     null,
     null,
     "nosort",
     "archivedate",
     DateTime.ParseExact(fd, "yyyyMMddHHmmss", null),
     DateTime.ParseExact(sd, "yyyyMMddHHmmss", null),
     100);

不确定它是否会返回数据,但至少它不会出错

【讨论】:

  • 看起来您正在将日期对象传递给 api 方法,而不是格式为 yyyyMMddHHmmss 的字符串...如果 API 可以,那么这很好。事实上,通常你似乎在做很多不必要的从日期到字符串再回来的转换......这可能是测试代码,但如果它的最终代码有点混乱......
  • 是的,它的测试代码,只是想让我的头脑绕过日期,这确实是一个概念证明。使用时,API 期望 DateTime 不是字符串,但 API 文档(其中很少)告诉我以该格式传递它。
【解决方案2】:

在 .NET 方面,您应该能够执行以下操作:

// convert DateTime to string
return DateTime.Now.ToString("yyyyMMddHHmmss", CultureInfo.InvariantCulture);

// convert string to DateTime
if(value.Length != 14)
    throw new ArgumentException("Value must be 14 characters.");
int year = Int32.Parse(value.Substring(0, 4));
int month = Int32.Parse(value.Substring(4,2));
int day = Int32.Parse(value.Substring(6,2));
int hour = Int32.Parse(value.Substring(8,2));
int minute = Int32.Parse(value.Substring(10,2));
int second = Int32.Parse(value.Substring(12,2));
return new DateTime(year, month, day, hour, minute, second, 0);

使用子字符串手动解析字符串有点做作,但它在技术上是有效的。 希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多