我有以下代码:
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路径。 任何人都可以在此代码中看到任何错误吗?
答案 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);