DateTime.ParseExact使用yyyy-MM-dd格式报错无法识别有效DateTime如何解决
问题解决方案
核心原因
报错是由于前端日期控件输出格式与后端预期解析格式不匹配导致:你当前配置的jQuery datepicker输出格式为
yyyy/MM/dd,同时土耳其语(tr)本地化规则也会影响日期的输出顺序/分隔符,和后端ParseExact要求的yyyy-MM-dd格式不一致,因此解析失败。
最优解决方案(推荐)
直接修改前端datepicker的输出格式,和后端要求对齐即可:
- 注意区分你使用的datepicker类型,调整对应配置:
- 如果你使用的是jQuery UI Datepicker:
$(function () { $('[id*=txtDate]').datepicker({ changeMonth: true, changeYear: true, dateFormat: "yy-mm-dd", // 此处yy对应4位年份,输出结果为yyyy-MM-dd格式 language: "tr" }); });- 如果你使用的是Bootstrap Datepicker:
$(function () { $('[id*=txtDate]').datepicker({ changeMonth: true, changeYear: true, format: "yyyy-mm-dd", // 直接指定输出格式为yyyy-MM-dd language: "tr" }); }); - 后端C#代码无需修改,建议把文化参数替换为
CultureInfo.InvariantCulture避免区域规则干扰:
using System.Globalization; DateTime x = DateTime.ParseExact(txtDate1.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture).AddDays(7);
备选方案(无需修改前端)
如果前端代码不可调整,可以给ParseExact传入多格式兼容数组,自动匹配前端返回的日期格式:
using System.Globalization; // 把前端可能返回的所有格式都加入数组 string[] allowFormats = { "yyyy/MM/dd", "dd/MM/yyyy", "yyyy-MM-dd" }; DateTime x = DateTime.ParseExact(txtDate1.Text, allowFormats, new CultureInfo("tr-TR"), DateTimeStyles.None).AddDays(7);
内容的提问来源于stack exchange,提问作者patipat nuntapet
相关产品推荐
相关产品推荐

