这行代码返回true
,time
等于"01/02/2016"
:
DateTime time;
bool result = DateTime.TryParse("1,2", CultureInfo.CurrentCulture, DateTimeStyles.None, out time);
我该怎么做才能返回false
?
我不使用DateTime.TryParseExact
,因为我必须指定"YY/MM/DD"
这样的格式,但我需要在PC上使用默认格式。
答案 0 :(得分:3)
对于您尝试做的事情,您最好使用TryParseExact。除了对您正在解析的字符串做出任意假设之外,它将返回String
,除非该字符串与您想要的模式完全匹配。
根据this,您应该能够指定文化,"d" as the format string indicating a "short date"。 false
应该遵循并使用您在短日期提供的文化中指定的格式。
答案 1 :(得分:0)
如果您可以使用标准日期格式,那么您应该使用其中一个限定符DateTime.TryParseExact
(在您的情况下,"d"
可能有效)。否则,您需要DateTime.TryParse
附近的自定义函数。
DateTime.TryParse
会尝试通过忽略一些缺失数据并尽可能填写一些缺失数据来提供帮助(参见MSDN)。如果要使用当前区域性来解析它,但仍希望排除TryParse将其视为有效的某些字符串,则应在运行try parse之前将其排除。例如
public bool MyTryParse(string dateString, out DateTime dt)
{
dt = new DateTime();
if (dateString == null)
return false;
if (dateString.Length > 3)
return false;
return DateTime.TryParse(dateString, CultureInfo.CurrentCulture, DateTimeStyles.None, out dt);
}
您可以添加所需的任何其他特殊情况测试。请注意TryParseExact
可能不是您想要的,,除非您可以使用标准日期格式作为指定的格式字符串(任何自定义格式字符串都将覆盖CurrentCulture
可能指示的内容);比较例如以下的输出:
DateTime dt;
bool res = DateTime.TryParseExact("02/03/2001", "MM/dd/yyyy", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt);
Console.WriteLine(dt);
// will output Feb 3, 2001, but a user in GB would probably intend Mar 3, 2001
bool res = DateTime.TryParseExact("02/03/2001", "d", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt);
Console.WriteLine(dt);
// will output Mar 3, 2001, but might be too restrictive for what you want?
res = DateTime.TryParse("02/03/2001", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt);
Console.WriteLine(dt);
// will output Mar 2, 2001, but goes back to your original problem