如何查看日期格式c#

时间:2013-07-05 02:23:38

标签: 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);
            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); }

基本上,它的作用是,用户在textbox1中输入一个字符串,点击按钮,C#将检查文本框中的日期格式,然后在日期上添加6个月并将其在textbox2中输出为字符串格式yyyyMMdd。如您所见,它接受yyyyMMdd和yyyy.MM.dd并执行相同的过程。但我的问题是我还有很多日期格式:

dd-MM-yy 
yyyy/mm/dd 
yyyy-mm-dd 
yy/mm/dd 

我不想在我的IF语句中使用OR。有没有像格式那样的方式,将被接受并执行该过程。 非常感谢你们!

3 个答案:

答案 0 :(得分:5)

One of the overloads of TryParseExact接受第二个参数作为字符串数组。但是,它不会告诉您确切使用的格式。如果你确实需要这些信息,那么是的,你只需要运行你想要的每种格式的单格式TryParseExact,看看哪种格式有效。

当然,您需要确保您允许的所有格式都明确指出哪些部分是日,月和年,否则您可能会解析01/02/03中的任何一种日期。

答案 1 :(得分:3)

DateTime.TryParseExact有一个重载,它接受多种格式来尝试解析。

DateTime date;
DateTime.TryParseExact("11-Nov-13", new[] { "yyyy-MM-dd","MM/dd/yy","dd-MMM-yy"}, null, DateTimeStyles.None, out date); 

然而,李泰勒的评论仍然是正确的,如果你的格式可能含糊不清,你就不会确切地知道什么是错的。

如果您的解决方案要求您使用提供的相同样式返回格式化字符串,那么您需要将格式传递给循环并单独尝试。

答案 2 :(得分:0)

您可以使用 CultureInfo.CurrentUICulture.DateTimeFormat.GetAllDateTimePatterns()检查所有可能的格式,该名称存在于命名空间System.Globalization下。

您可以使用 DateTime.TryParseExact ,它具有接受多种格式的重载以尝试解析 - ParseExact(string s,string []格式,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;
}