系统格式异常:无法将字符串识别为有效的日期时间 - 尝试转换 MM/DD/YYYY

7

我有以下的C#方法:

DateTime ConvertStringToDate(string dateInString)
{
    try {
        //string SSD = dateInString;
        //DateTime date = Convert.ToDateTime(SSD);
        //string strDate = String.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", date);
        //return Convert.ToDateTime(strDate);

        return DateTime.ParseExact(dateInString, "MM/dd/yyyy", CultureInfo.InvariantCulture);
    }
    catch (Exception) { }
    return DateTime.Today;
} 

这段代码是我之前尝试过的另一种方法。

我在印度为美国客户开发ASP.NET WebForms应用程序。 在其中一个表单上,我的客户将在文本框中输入日期,例如6/20/2018,格式为MM / dd / yyyy。

但是,以这两种方式都会出现以下错误:System.FormatException: 'String was not recognized as a valid DateTime.'

我在SO上尝试了许多解决方案,但没有一个能够解决问题。


@Rafalon 抱歉,我试图使用时间进行测试。忘记将其删除了。它也无法仅适用于日期。 - Aishwarya Shiva
1
dateInString确切值是多少?不要猜测,进行调试并检查。 - mjwills
2
MM/dd/yyyy格式需要您的日期为06/20/2018,而MM/dd/yyyy hh:mm:ss无法用于仅包含日期的字符串。 - Rafalon
@mjwills 在调试时的值为6/20/2018。 - Aishwarya Shiva
那么你觉得 MM/dd/yyyy hh:mm:ss 能匹配上这个吗? - Rafalon
@Rafalon 哦,抱歉我又忘了从格式中删除时间。之前我试过只使用日期的格式。 - Aishwarya Shiva
7个回答

12
return DateTime.ParseExact(dateInString, "M/d/yyyy", CultureInfo.InvariantCulture);

在这里查看

我的回答与Fabulous的回答不同之处在于,我还将dd缩短为d,因此如果您的用户写入6/6/2018,也可以正常工作。


@AishwaryaShiva 是的,它确实可以。 - Rafalon
@AishwaryaShiva 为什么你会问那个问题呢?你为什么不直接去测试它呢? - mason
@mason 我其实和你一样有同样的问题,特别是因为我包含了一个链接,你可以基本上更改输入并点击“执行”。 - Rafalon
@mason 我当时很着急,所以看答案的时候没有注意到链接和示例。 ;) - Aishwarya Shiva

3

您的日期格式是MM/dd/yyyy,但您输入的日期与之不匹配,应该是M/dd/yyyy。

根据您的评论,要解决6/1/2018问题,您需要将其更改为M/d/yyyy格式。


尝试使用“6/1/2018”格式,但它不起作用。 - Aishwarya Shiva
@Rafalon,在看到原帖的评论并进行排序后,我看到了并点赞了你的回答。当我编辑我的原始答案并引用时间时,我还没有看到它。 - Fabulous

1
您的格式字符串缺少上午/下午指示符:
return DateTime.ParseExact
    (dateInString + " 12:00:00 AM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
    // Here ---------------------------------------------^

抱歉,我试图使用时间进行测试,忘记将其删除。它也无法仅适用于日期.. 请查看更新。 - Aishwarya Shiva

1
尝试不使用字符串连接符“ AM”。

抱歉,我试图使用时间进行测试,忘记将其删除。它也不能仅适用于日期。请查看更新。 - Aishwarya Shiva
你填写了 MM/dd/yyyy 但使用了 "MM/dd/yyyy hh:mm:ss" 的格式。 - Dmitriy S
请尽可能只使用“MM/dd/yyyy”格式。 - Dmitriy S

1

几天前,当日期为7月9日时,我遇到了相同的异常,我只需在9后面添加一个0以匹配日期格式。

尝试在您的月份后面添加0以匹配日期格式中的MM。


0
如果您想将这种字符串(01-01-2022)转换为日期,请尝试以下代码。
DateTime date = DateTime.ParseExact("01-01-2022", "MM-dd-yyyy", CultureInfo.InvariantCulture);

如果您想将这种字符串(01/01/2022)转换为日期,则尝试以下代码。
DateTime date = DateTime.ParseExact("01-01-2022", "MM/dd/yyyy", CultureInfo.InvariantCulture);

0
有时候你的系统时间和日期格式与测试格式不同,你可以尝试更改系统日期和时间格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接