无法使DateTime.TryParseExact工作

时间:2013-05-29 13:33:15

标签: c# .net

我有以下代码:

string[] format = { "yyyy/MM/dd", "MM/dd/yyyy" };
DateTime valueDate;
value = value.Replace("-", "/");
if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out valueDate))
{
    value = "TO_DATE(" + valueDate + ", 'yyyy-mm-dd')";
}
else
{
    throw new Exception("Could not parse incoming date: " + valueDate);
}

所以现在我有一个测试用例。 在使用“/".

替换” - “替换语句后,值='2013/01/21'

这应匹配格式字符串数组中的第一种格式。 但TryParseExact不工作,总是进入else路径。 任何人都可以在此代码中看到任何错误吗?

2 个答案:

答案 0 :(得分:4)

问题不是TryParseExact,而是字符串的价值。我这样说是因为这个小scriptcs脚本:

using System.Globalization;

string[] format = { "yyyy/MM/dd", "MM/dd/yyyy" };
DateTime valueDate;
var value = "2013/01/21";
if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out valueDate))
{
    Console.WriteLine("Success!");
}
else
{
    Console.WriteLine("Failure!");
}

打印Success!。所以,换句话说,这句话:

  

和价值=' 2013/01/21'替换语句替换后#34; - "与" /"。

字面上不可能是正确的。

正如詹姆斯所说,实际的字符串值中很可能有空格。有几个解决方案:删除空格或允许空格。要允许空格,您可以使用DateTimeStyles.AllowWhiteSpaces而不是DateTimeStyles.None

答案 1 :(得分:0)

不知道这是否是您的问题,但请确保在使用日期格式时始终排除正斜杠。 /字符不是字面斜杠,而是本地系统的date separator(通常是正斜杠,但并非总是如此)。

使用格式字符串时,可以使用实际反斜杠转义正斜杠,例如:

DateTime.ParseExact("2012/12/31", "yyyy\\/MM\\/dd", null);
// or
DateTime.ParseExact("2012/12/31", @"yyyy\/MM\/dd", null);