无法获取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不工作,总是去到其他路径。有人能看出这段代码中的错误吗?
这不是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);