Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查日期格式c#_C#_.net_Date Format - Fatal编程技术网

如何检查日期格式c#

如何检查日期格式c#,c#,.net,date-format,C#,.net,Date Format,我这里有一个c#代码块: string inputString = textBox1.Text; DateTime dt; try { if (DateTime.TryParseExact(inputString, "yyyyMMdd", null, DateTimeStyles.None, out dt) == true) { dt = dt.AddMonths(6); textBo

我这里有一个c#代码块:

    string inputString = textBox1.Text;
    DateTime dt;
    try
    {
        if (DateTime.TryParseExact(inputString, "yyyyMMdd", null, DateTimeStyles.None, out dt) == true)
        {
            dt = dt.AddMonths(6);
            textBox2.Text = dt.ToString("yyyyMMdd");
        }
        else if (DateTime.TryParseExact(inputString, "yyyy.MM.dd", null, DateTimeStyles.None, out dt) == true)
        {
            dt = dt.AddMonths(6);
            textBox2.Text = dt.ToString("yyyyMMdd");
        }
    }   
    catch (Exception ex) { MessageBox.Show(ex.Message); }
基本上,它所做的是,用户在文本框1中输入一个字符串,点击按钮,C#将检查文本框中的日期格式,然后在日期上添加6个月,并在文本框2中输出为字符串格式YYMMDD。正如您现在看到的,它接受yyyyMMdd和yyyy.MM.dd并执行相同的过程。但我的问题是我还有很多日期格式:

dd-MM-yy 
yyyy/mm/dd 
yyyy-mm-dd 
yy/mm/dd 
我不想在IF语句中使用OR。是否有一种方式,无论格式是什么,都会被接受并完成这个过程。 谢谢大家

接受字符串数组作为其第二个参数。但是,它不会告诉您使用了哪种格式。如果您真的需要这些信息,那么是的,您只需要对所需的每种格式运行一种格式的TryParseExact,然后看看哪种格式有效

当然,您需要确保您允许的所有格式都明确表示哪些部分是日、月和年,否则您可能会将01/02/03解析为六个可能的日期中的任意一个。

有一个重载,可以接受多种格式来尝试解析

DateTime date;
DateTime.TryParseExact("11-Nov-13", new[] { "yyyy-MM-dd","MM/dd/yy","dd-MMM-yy"}, null, DateTimeStyles.None, out date); 
然而,Lee Taylor的评论仍然是正确的,因为如果你有可能模棱两可的格式,你将不知道到底出了什么问题


如果您的解决方案要求您使用与提供的样式相同的样式返回格式化字符串,那么您需要将格式传递到循环中,然后分别尝试

您可以使用命名空间System.Globalization下的CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns()检查所有可能的格式

您可以使用DateTime.TryParseExact,它有一个重载,可以接受多种格式来尝试解析- ParseExact(字符串s、字符串[]格式、IFormatProvider提供程序、DateTimeStyles样式)

示例代码:

private DateTime GetDate(string date)
{
    DateTime dateTime = new DateTime();
    string[] formats = CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns();

    try
    {
        dateTime = DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
    }
    catch
    {
        throw ...;
    }

    return dateTime;
}

你的问题将是一个模棱两可的问题。以下内容应解释为:12/11/13。是11月12日还是12月11日?2012年11月13日。由于标点符号和两位/四位年份的变化,提供的具体列表实际上都是明确的,尽管这是假设提供的列表是他们计划使用的所有格式的完整列表。哦!我懂了。那么也许我应该坚持使用If-else呢?我想这就是他们计划使用的所有日期格式……我相信你可以说textBox2.Text=DateTime.Parse(inputString.ToString(“yyyyMMdd”);链接到小提琴:哈,比我快30秒。:)我正在获取System.DateTime不包含TryParse的定义。我的命名空间上已经有了.globalization。。