C# 如何验证日期时间格式?

C# 如何验证日期时间格式?,c#,validation,datetime,C#,Validation,Datetime,我想让用户输入一个日期时间格式,但我需要验证它以检查它是否可以接受。用户可以输入“yyyy-MM-dd”就可以了,但也可以输入“MM/yyyyMM/ddd”或任何其他组合。有什么方法可以验证这一点吗?您正在寻找类似的东西吗 DateTime expectedDate; if (!DateTime.TryParse("07/27/2012", out expectedDate)) { Console.Write("Luke I am not your datetime.... NOOO!!

我想让用户输入一个日期时间格式,但我需要验证它以检查它是否可以接受。用户可以输入“yyyy-MM-dd”就可以了,但也可以输入“MM/yyyyMM/ddd”或任何其他组合。有什么方法可以验证这一点吗?

您正在寻找类似的东西吗

DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
    Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}
如果您的用户知道所需的确切格式

string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), 
                            DateTimeStyles.None, out expectedDate))
{
    Console.Write("Thank you Mario, but the DateTime is in another format.");
}

除非我记错了,否则唯一无效的DateTime格式字符串只有一个字符长。您可以假定任何2个或更多字符的DateTime格式字符串有效

DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"

作为参考,允许使用单个字符串作为格式:

d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y

任何其他字符(如
q
)本身无效。所有其他字符串都将成功解析为格式化字符串。

您不会谈论您的验证策略。无论如何,您应该使用涉及正则表达式的内容,然后应用允许的模式。这将有助于对抗正式有效性。。然后,您必须注意实际内容,并确保根据月份、日期和年份确定的值是正确的


无论如何,有几个人建议使用DateTime.TryParse()方法来让基底为您服务。但无论如何,您都必须指定格式!所以没有魔法!否则您将陷入歧义

我不知道任何方法来实际验证它们输入的格式,因为有时您希望故意包含可以翻译成任何内容的字符。你可以考虑的一件事是允许用户通过预览他们输入的格式转换成什么来自我验证。

< P>我假设你想知道指定的格式字符串是否有效……/P> 为此,您可以往返:

private bool IsValidDateFormat(string dateFormat)
{
    try
    {
        String dts=DateTime.Now.ToString(dateFormat, CultureInfo.InvariantCulture);
        DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

我的解决方案是将输入字段标记为只读,并允许用户仅通过以下方式更改值

这是直观的。您可以指定首选格式,只需验证此格式

否则你可能会遇到麻烦。你将如何处理“2020年3月2日”在美国,你将其解释为2月3日,但在南美洲,它肯定是3月2日。全球还有很多其他的日期格式。

这对我来说很有用-

try
{
  String formattedDate = DateTime.Now.ToString(dateFormat);
  DateTime.Parse(formattedDate);
  return true;
}
catch (Exception)
{
  return false;
}

这只验证特定的日期时间。用户实际上是在输入“格式”本身。您对我不是很清楚…您希望用户以任何格式输入日期,并希望它验证猜测正确的格式?您确定您的格式不会在歧义中冲突吗??向用户建议格式不是更好吗?-1这不是Mindquake所要求的。他们想验证一个格式字符串,而不是日期字符串。+1用于nerdy控制台写入,因为这是我一直在寻找的答案。只是一个小提示:在匈牙利,人们使用“合并”的欧洲和美国格式:dd/MM/yyyy。因此,“2020年2月18日”在那里完全有效。+1这是最好的答案(IMO)。由于有效格式字符串的定义非常松散,因此与用户确认是最好的解决方案。您不需要验证以显示预览,因为如果要执行类似于
DateTime.Now.ToString的操作(“这是虚构的,不会起作用”)预览将显示
T1i30 i30 14a4e up和4将不起作用
。您可以使用
try/catch
块来处理任何非常奇怪的事情。您还可以将
%
作为前缀,使单个字符串也有效
DateTime.Now.ToString(“%x”)==“x”
@MarkusJarderot:True,我试图关注一个事实,“无效的日期时间格式”由于其灵活性非常罕见。事实上,存在任何无效格式的唯一原因是,您不能将a
y
指定为
h
并得到奇怪的结果。