2016-06-28 103 views
0

这行代码返回truetime等于"01/02/2016"的TryParse弦号码为DateTime返回true

DateTime time; 
bool result = DateTime.TryParse("1,2", CultureInfo.CurrentCulture, DateTimeStyles.None, out time); 

我能做些什么来回报false

我不使用DateTime.TryParseExact,因为我将不得不指定"YY/MM/DD"之类的格式,但我需要使用PC上的默认格式。

+3

'我该怎么做TryParse方法返回False?' - 给它一个无效的字符串解析。 –

+0

我猜想OP想要为特定的字符串返回'False''“1,2”' –

+0

这怎么可能返回'true'? –

回答

3

对于你要做的事情,你可能最好使用TryParseExact。除非对字符串进行任意假设,否则它将返回false,除非字符串与您想要的模式完全匹配。

根据this,您应该能够指定一种文化,并且"d" as the format string indicating a "short date"TryParseExact应该效仿,并使用您为短日期提供的文化中指定的格式。

+0

这不会真的让他正确地使用当前的文化 - 例如,如果用户期望月份与第一天相比......指定一个格式字符串将覆盖那个,不是? –

+0

是的,它会的。我只是假设“第一个月”或“第一天”是文化任务的一部分。除非选择了错误的文化,否则我不会指望与标准不同。 –

+1

OP明确表示他不想指定格式。 –

0

如果您可以使用标准日期格式,那么您应该使用其中一个限定符(在您的情况下,"d"可能会有效)的DateTime.TryParseExact。否则,你需要一个围绕DateTime.TryParse的自定义函数。

DateTime.TryParse将尝试通过忽略一些缺失的数据并在可能的地方填写一些缺失数据(请参阅MSDN)来帮助您。如果你想使用当前的文化来解析它,但你仍然想排除TryParse认为有效的特定字符串,你应该在运行尝试解析之前排除它们。例如

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 
+0

嗨,感谢所有的答案,我终于用Dan Field的方式表达了我的想法,它的工作原理,我使用它的方式,因为我必须非常明确地使用TryParseExact方法,并且我希望为用户提供更多的自由度。 – mando100