2010-06-21 65 views
1

在我的应用程序中,用户可以通过在文本框中输入日期来指定日期模式。该模式用于记录消息。例如,如果用户指定“DD-MM”,然后在日志文件中,他可以看到以下内容:C#。日期模式验证

[12-06] Some message... 
[02-09] Some message 2... 

如何验证这种模式?如何保护输入错误的模式?

+0

所以你知道这是约会。你想确保它符合日期模式? – Rake36 2010-06-21 12:42:46

+0

如果是在一个月的开始,你将如何区分'dd-MM'和'MM-dd'之间的区别。或者今天可能有很多消息,所以应该是每分钟一次,所以它是'hh-mm'? – 2010-06-21 12:47:28

+1

考虑ho1的评论以及你的问题。我建议你为用户提供一个选项列表,而不是解析输入的文本。 – 2010-06-21 12:58:01

回答

3

最简单的方法就是试着解析日期。

DateTime someDate; 

// Valid will be false if it could not parse the date 
bool valid = DateTime.TryParse(yourFormat, out someDate); 
+0

我会添加,如果你需要在客户端浏览器上验证,只需使用正则表达式。 – Nordes 2010-06-21 12:42:22

+0

DateTime.TryParse()需要一个日期或时间的字符串表示作为第一个参数(而不是一个模式)。它不需要“dd-MM”,因为OP正在提供;它想要OP正试图产生的“12-06”。 – gap 2015-07-16 18:10:29

0

正则表达式可能是一个不错的选择。

0

这是一个困难的问题。我试过了:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

问题是日期格式模式非常灵活。即使事情没有呈现最新的信息是允许(而不是通过我的示例代码检测):

DateTime.Now.ToString("bla"); // no exception raised 

一个更好的方法(我还没有尝试过)看到这个other SO post

也请参阅关于该问题的讨论,并附上J. Skeet的评论。

0

这是一个难题。我试过了:

try 
{ 
    DateTime.Now.ToString(tmpFormatSpec);      
} 
catch (Exception) 
{ 
    // the format spec is known to be bad 
} 

问题是日期格式模式非常灵活。即使事情没有呈现最新的信息是允许(而不是通过我的示例代码检测):

DateTime.Now.ToString("bla"); // no exception raised 

一个更好的方法(我还没有尝试过)看到这个other SO post

关于这个问题,请看这个discussion,由J. Skeet评论。