【问题标题】:How to check date format c#如何检查日期格式c#
【发布时间】:2013-07-05 02:23:37
【问题描述】:

我这里有一段 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。有没有一种方法,无论格式是什么,都将被接受并执行该过程。 非常感谢各位!

【问题讨论】:

  • 您的问题将是歧义之一。以下内容应解释为:12/11/13。那是 11 月 12 日还是 12 月 11 日?
  • 2012 年 11 月 13 日。由于标点符号和两位/四位数年份的变化,提供的具体列表实际上都是明确的,尽管这是假设提供的列表是他们计划使用的所有格式的完整列表使用。
  • 哦!我明白了。所以也许我应该坚持如果否则呢?
  • 我认为这是他们计划使用的所有日期格式...
  • 我相信你可以直接说 textBox2.Text = DateTime.Parse(inputString).ToString("yyyyMMdd");小提琴链接:dotnetfiddle.net/uuFZ1X

标签: c# .net date-format


【解决方案1】:

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

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

【讨论】:

  • 哈,比我快 30 秒。 :)
  • 我得到 System.DateTime 不包含 TryParse 的定义。我的命名空间上已经有了 .globalzation ..
【解决方案2】:

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

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

但是 Lee Taylor 的评论仍然是正确的,因为如果您的格式可能模棱两可,您将无法确切知道哪里出了问题。

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

【讨论】:

    【解决方案3】:

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

    您可以使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2018-07-03
      • 1970-01-01
      • 2023-03-12
      • 2018-01-22
      • 2011-04-06
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多