无法获取DateTime.TryParseExact工作

本文关键字:TryParseExact 工作 DateTime 获取 | 更新日期: 2023-09-27 18:15:58

我有以下代码:

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);
}

现在我有一个测试用例。而value = '2013/01/21'后的replace语句将"-"替换为"/"

应该匹配格式字符串数组中的第一个格式。但TryParseExact不工作,总是去到其他路径。有人能看出这段代码中的错误吗?

无法获取DateTime.TryParseExact工作

这不是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!。所以,换句话说,这个语句:

和replace语句后的value = '2013/01/21'

字面上不可能是正确的

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

我不知道这是不是你的问题,但请确保在使用日期格式时总是转义出正斜杠。/字符不是字面上的斜杠,而是您本地系统的日期分隔符(通常是前斜杠,但也不总是)。

使用格式字符串时,用真正的反斜杠转义正斜杠,如:

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