DateTime.TryParse 无文化

DateTime.TryParse without Culture

我想检查日期是否可以解析。但是当我尝试使用以下逻辑时,它正在落入有效日期(例如: 3 / 10 / 2020)。 我通过 ajax 请求收到这个 myDate。

我试过改变文化,但还是没用

DateTime validMyDate;
if(DateTime.TryParse(myDate, CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out validMyDate)){}

感谢您的帮助

已编辑: 请在此处找到 ajax 代码

//fileds

<input name="StartDate" id="StartDate" type="hidden" value="3/10/2020 12:00:00 AM"  data-val="true">
<input name="EndDate" id="EndDate" type="hidden" value="3/26/2020 12:00:00 AM"  data-val="true">

// ajax call
$.get(domainUrl + "Controller/Action",
            {
              strartDate: dateFormatter.fomat($('#StartDate').val(), "mm/dd/yyyy"),
                endDate:  dateFormatter.fomat($('#EndDate').val(), "mm/dd/yyyy");
            },
            function (result) {

            }).fail(function (error) {

            });


// date formatter
var dateFormatter = {
    fomat: function (date, format) {
        var year = date.getFullYear();
        var month = date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth();
        var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
        var newDate;
        switch (format) {
            case "dd/mm/yyyy": newDate = day + "/" + month + "/" + year;
                break;            
            default: newDate = year + "-" + month + "-" + day;
        }
        return newDate;
    }
}       

请注意 : 增加了这个格式化功能,因为.val()一开始没用,所以我重新格式化一下看看是否能用。

此代码绝对有效:

if (DateTime.TryParseExact("3/10/2020","d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime validStartDate))
{
}

但是你的琴弦有些烂了。如果我从您上面的评论中复制“3/10/2020”,它不起作用。如果我自己写它,它就可以工作。你的字符串一定是某种奇怪的编码,但我无法确定它是什么。

编辑: 要删除不可见字符,请执行以下操作:

var str = "‎3‎/‎10‎/‎2020";
str = str.Replace("\u200E","");
if (DateTime.TryParseExact(str,"d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime validStartDate))
{
}

但这将是一个 hack。问题应该换到另一端。