1

当我尝试将其转换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 

为什么我得到这个?

4

3 回答 3

7

除了您将 DateTime 转换为字符串然后再转换回来的事实之外,DateTime 格式不完全匹配。

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

我要冒昧地说,通过查看您的代码,我认为您正在尝试将日期格式化为日期,这可以使用ToStringDateTime 上的方法来实现:

string todaysDate = DateTime.Now.ToString("MM/dd/yyyy"); // todaysDate will contain "06/05/2013"
于 2013-06-05T09:15:15.940 回答
2

6/5/2013 2:29:21 PM不一样MM/dd/yyyy
所以当然解析失败了。

从您的评论看来,您实际上是在测试格式字符串,并且您并不关心日期的值。那么为什么不以您真正想要的格式硬编码您的日期:

String userInput = "MM/dd/yyyy";
DateTime.ParseExact("11/11/2011", userInput,  CultureInfo.CurrentCulture)
于 2013-06-05T09:24:12.073 回答
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
于 2013-06-05T09:23:44.783 回答