代码之家  ›  专栏  ›  技术社区  ›  user48408

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

  •  7
  • user48408  · 技术社区  · 15 年前

    我有一个webservice,其中有一个方法是通过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看起来像这样

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

    我使用sqldatestring作为发送到数据库的命令文本的一部分。它是一个遗留的应用程序和它的内联sql,所以我没有自由设置存储过程和在代码后面创建和分配参数。90%的时间都是这样。对m_txtdateadd的onchange事件调用webservice。我不时从服务器得到的响应是

    System.ArgumentException:无法将2009年6月25日转换为System.DateTime。 System.ArgumentException:无法将2009年6月25日转换为System.DateTime。

    参数名称:类型--->system.formatexception:字符串未被识别为有效的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 回复  |  直到 15 年前
        1
  •  11
  •   John Saunders    15 年前

    您需要以xml:2009-07-10t12:40z的正确格式发送日期时间。 http://en.wikipedia.org/wiki/ISO_8601 是的。


    另外,为什么要使用httprequest?为什么不使用add service reference呢?

        2
  •  4
  •   Atish Narlawar    12 年前

    2001-10-26T19:32:52Z

    使用这种格式。

        3
  •  0
  •   StuperUser    15 年前

    如何创建要传递到getTotalCost()的日期时间?

    你有正确的构造函数重载吗 http://msdn.microsoft.com/en-us/library/system.datetime.aspx 是吗?

        4
  •  0
  •   JGWeissman    14 年前

    是否将字符串值从文本框直接传递给webservice?更可靠的方法是将用户输入字符串解析为javascript日期对象,将日期对象传递给webservice,并让微软ajax库中的序列化程序确定如何格式化它。

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

    推荐文章