ExceptionType:“System.FormatException”消息:“30/6/2019 不是 DateTime 的有效值。”

Posted

技术标签:

【中文标题】ExceptionType:“System.FormatException”消息:“30/6/2019 不是 DateTime 的有效值。”【英文标题】:ExceptionType: "System.FormatException" Message: "30/6/2019 is not a valid value for DateTime." 【发布时间】:2019-11-04 00:19:13 【问题描述】:

我有两个 Ajax 请求。第一个从日期选择器获取日期并检查数据库日期。这工作正常。

第二个请求从日期选择器获取日期并检索该月的第一个日期和该月的最后一个日期。这会导致错误。

这里是 WebMethod:

[System.Web.Services.WebMethod]
public static string GetDateFromDB(DateTime compareDate)
            
  string selectedDate = compareDate.ToString("yyyy/MM/dd");                           
  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT * from Holiday where Date='" + selectedDate + "'", conn);           
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);       
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);

  if (dt == null || dt.Rows.Count == 0)
    return "NG";
  else
    return "OK";


[System.Web.Services.WebMethod]
public static string GetFirstDateAndLastDate(DateTime firstDayDate, DateTime lastDayDate, string ddlName)

  string firstDay = firstDayDate.ToString("yyyy/MM/dd");
  string lastDay = lastDayDate.ToString("yyyy/MM/dd");

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT sum([NumberOfHours]) FROM [LoginDB1].[dbo].[tbOT] where [Date] between Date =  + '" + firstDay + "' And Date =  + '" + lastDay + "' AND name =  + '" + ddlName + "'", conn);
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);     

  return "NA";            

脚本就在下面:

jQuery(function($) 
  $("[id$=datepicker]").datepicker(
    onSelect: function(dateText) 
      $(this).change();
      $.ajax(
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetDateFromDB",
        data: ' "compareDate" : "' + dateText + '"',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) 
          if (response.d == "OK") 
            alert("Today is Public Holiday!!!");
            $("[id$=txtOTRate]").val(1);
           else if (response.d == "NG") 
            var date1 = $("[id$=datepicker]").datepicker('getDate');
            var day = date1.getDay();
            if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5 || day == 6) 
              $("[id$=txtOTRate]").val(1.5);
             else 
              $("[id$=txtOTRate]").val(2);
            
          
        
      );

      var selectedDate = $("[id$=datepicker]").datepicker('getDate');
      //  var selectedDate = gg.getDate();
      //var selectedDate = $("[id$=datepicker]").val();
      var firstDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);
      var lastDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0);

      var firstDayWithSlashes = (firstDay.getDate()) + '/' + (firstDay.getMonth() + 1) + '/' + firstDay.getFullYear();
      var lastDayWithSlashes = (lastDay.getDate()) + '/' + (lastDay.getMonth() + 1) + '/' + lastDay.getFullYear();

      var data = ;
      data.fristDayDate = firstDayWithSlashes;
      data.lastDayDate = lastDayWithSlashes;
      data.ddlName = $("[id$=ddlName] option:selected").text();

      $.ajax(
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetFirstDateAndLastDate",
        // data: ' "fristDayDate" : "' + firstDayWithSlashes + '" + "lastDayDate" : "' + lastDayWithSlashes + '"',
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) 
          if (response.d == "NA") 
            $("[id$=txtRemainHour]").val();
          
        
      );
    ,
  ).on("change", function() );

  function display(msg) 
    $("<p>").html(msg).appendTo(document.body);
  
);

当检查 Network > Headers > Request Payload 下的页面时,它会正确显示(如下):

fristDayDate: "1/6/2019", lastDayDate: "30/6/2019", ddlName: "Masrudin Bin A B Rahman" ddlName:“马斯鲁丁·宾·A·B·拉赫曼” 第一天日期:“2019 年 1 月 6 日” lastDayDate:“2019 年 6 月 30 日”

但是在预览下,错误信息显示如下:

消息:“30/6/2019 不是 DateTime 的有效值。”,… 异常类型:“System.FormatException” 消息:“30/6/2019 不是 DateTime 的有效值。” 堆栈跟踪:“ 在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值) 在 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, javascriptSerializer 序列化器, Boolean throwOnError, Object&convertedObject)

在响应下,错误消息如下所示:

"Message":"30/6/2019 不是 DateTime 的有效值。","StackTrace":" 在 System.ComponentModel.DateTimeConverter.ConvertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值) 在 System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(对象 o,类型类型,JavaScriptSerializer 序列化程序,布尔 throwOnError,Object\u0026 转换对象) 在

【问题讨论】:

你的数据库在线吗? 请查看minimal reproducible example 指导和edit 帖子以提供必要的信息。请注意,在代码中显示 SQL 注入漏洞示例并没有改善对 SO 问题的接收。 @Licentia 当错误出现在参数解析时(作为默认 ASP.Net 模型投标的一部分),“数据库是否在线”有什么区别? 你的问题的问题只是它过于复杂。你有这个字符串“30/06/2019”,只向我们展示正在进行转换并且失败的代码..希望有所帮助 "1/6/2019" 需要 d/M/yyyy 格式字符串或月份和日期的前导零以匹配您的格式 【参考方案1】:

卡里奥普,

试试这个

DateTime firstDay= DateTime.ParseExact(firstDayDate, "yyyy/MM/dd", new CultureInfo("en-US"));  

【讨论】:

以上是关于ExceptionType:“System.FormatException”消息:“30/6/2019 不是 DateTime 的有效值。”的主要内容,如果未能解决你的问题,请参考以下文章

WebApi 数据保护操作未成功。这可能是由于未为当前线程的用户上下文加载用户配置文件导致的。当线程执行模拟时,可能会出现此情况。","ExceptionType":&q

异常类型:02 异常代码:08badf00d 未能及时启动

Autel MaxiSys MS908CV Diagnostic System for Commercial Vehicles

TinkerTool System for Mac(系统设备维护工具)免激活

A MacFUSE-Based Process File System for Mac OS X

U3D对话任务插件 Dialogue System for Unity 研究