字符串在ParseExact中未被识别为有效的DateTime

时间:2013-06-05 09:07:11

标签: .net vb.net datetime

当我尝试将DateTime转换为特定格式时,我收到此错误。

DateTime.Now= 6/5/2013 2:29:21 PM

DateTime.ParseExact(CStr(DateTime.Now), "MM/dd/yyyy",  CultureInfo.CurrentCulture)

错误:

String was not recognized as a valid DateTime 

为什么我得到这个?

3 个答案:

答案 0 :(得分:7)

除了你将DateTime转换为字符串然后再转回之外,DateTime格式并不完全匹配。

DateTime.ParseExact将字符串解析为DateTime对象,您提供的格式必须与完全匹配。您说DateTime.Now显示为6/5/2013 2:29:21 PM,正确的格式为M/d/yyyy h:mm:ss tt。有关自定义日期格式的详细信息,请查看MSDN

我要说的是,通过查看您的代码,我认为您正在尝试将日期格式化为日期,这可以使用ToString方法实现日期时间:

string todaysDate = DateTime.Now.ToString("MM/dd/yyyy"); // todaysDate will contain "06/05/2013"

答案 1 :(得分:2)

6/5/2013 2:29:21 PMMM/dd/yyyy不同。
当然,解析失败了。

从您的评论中听起来您确实在测试格式字符串,而您并不关心日期的价值。 那么为什么不以您真正想要的格式硬编码您的日期:

String userInput = "MM/dd/yyyy";
DateTime.ParseExact("11/11/2011", userInput,  CultureInfo.CurrentCulture)

答案 2 :(得分:1)

注意名为 Exact 的方法的一部分,你给它一个包含时间的字符串,并没有指定如何解析时间,因此解析将失败。

试试这个:

DateTime.ParseExact(str, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture)

示例LINQPad程序:

void Main()
{
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");

    string str = "6/5/2013 2:29:21 PM";

    DateTime.ParseExact(str, "M/d/yyyy h:mm:ss tt", CultureInfo.CurrentCulture).Dump();
}

输出:

6/5/2013 2:29:21 PM