Web服务的正确日期时间格式

时间:2009-07-10 14:42:08

标签: sql web-services date-format formatexception

我有一个带有方法的web服务,该方法通过我的javascript中的xmlhttprequest对象调用。该方法接受datetime参数,该参数随后转换为字符串并针对数据库运行以执行计算。

我从m_txtDateAdd获取值并发送xmlHttprequest

<asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>">
</asp:textbox>

其中有一个验证器

<asp:CustomValidator id="m_DateAddValidator" runat="server" ErrorMessage="Please Enter a Valid Date" ControlToValidate="m_txtDateAdd">&#x25CF;</asp:CustomValidator>

我的网络方法看起来像这样

[WebMethod]
public decimal GetTotalCost(DateTime transactionDate)
{
    String sqlDateString = transactionDate.Year+"/"+transactionDate.Month+"/"+transactionDate.Day;

我使用sqlDateString作为我发送到数据库的commandtext的一部分。它是一个遗留应用程序及其内联sql,所以我没有自由设置存储过程,并在我的代码后面创建和分配参数。这有效率的90%。在m_txtDateAdd的onchange事件上调用webservice。我一次又一次地从服务器得到的响应是

System.ArgumentException:无法将25/06/2009转换为System.DateTime。 System.ArgumentException:无法将25/06/2009转换为System.DateTime。

参数名称:type ---&gt; System.FormatException:String未被识别为有效的DateTime。

   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

4 个答案:

答案 0 :(得分:11)

您需要以正确的XML格式发送DateTime:2009-07-10T12:40Z。来自http://en.wikipedia.org/wiki/ISO_8601


另外,你为什么使用HttpRequest?为什么不使用添加服务参考?

答案 1 :(得分:4)

2001-10-26T19:32:52Z

使用这种格式。

答案 2 :(得分:0)

如何创建DateTime以传入GetTotalCost()?

您是否从 http://msdn.microsoft.com/en-us/library/system.datetime.aspx获得了正确的构造函数重载?

答案 3 :(得分:0)

您是否将文本框中的String值直接传递给Web服务?将用户输入String解析为javascript Date对象,将Date对象传递给webservice,让Microsoft的ajax库中的序列化程序弄清楚如何格式化它会更可靠。

查看获取值并调用Web服务的客户端javascript代码可能会有所帮助。