【问题标题】:C# Check if input is valid dateC# 检查输入是否为有效日期
【发布时间】:2023-03-15 03:24:01
【问题描述】:

我正在制作日历。在这里,我想检查用户输入是否是日期以及是否没有显示错误。我听说过DateTime.TryParse。我怎样才能在这里正确使用它?谁能用简单的话解释一下?

    public void addMeeting()
    {
      string readAddMeeting;
      var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; // I copied this

      Console.WriteLine("Add a schedule for specific dates: ");

      readAddMeeting = Console.ReadLine();
    }

【问题讨论】:

标签: c# date time


【解决方案1】:

这样使用DateTime.TryParseExact

public void addMeeting()
{
    var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; 
    Console.WriteLine("Add a schedule for specific dates: ");
    string readAddMeeting = Console.ReadLine();
    DateTime scheduleDate;
    bool validDate = DateTime.TryParseExact(
        readAddMeeting,
        dateFormats,
        DateTimeFormatInfo.InvariantInfo,
        DateTimeStyles.None, 
        out scheduleDate);
    if(validDate)
        Console.WriteLine("That's a valid schedule-date: {0}", scheduleDate.ToShortDateString());
    else
        Console.WriteLine("Not a valid date: {0}", readAddMeeting);
}

该方法返回一个bool 指示它是否可以被解析,并且您将一个DateTime 变量作为out 参数传递,如果日期有效,它将被初始化。

请注意,我使用的是DateTimeFormatInfo.InvariantInfo,因为您不想使用本地的DateTime 格式,而是一种适用于任何文化的格式。否则,dd/MM/yyyy 中的 / 将替换为您当前区域性的日期分隔符。 Read

【讨论】:

  • TryParseExact 很好的发现!没想到在只采用字符串作为可能的 DateTimeFormats 方面会有所不同(我不明白为什么 TryParse 只采用字符串,而 TryParseExact 也采用整个字符串数组)。很好的发现!
  • 好的,我刚刚复制了你的代码,看看会发生什么。但它告诉我“名称 DateTimeFormatInfo 和 DateTimeStyles 在当前上下文中不存在”。我做错了什么?
  • @user5462581:您必须添加using System.Globalization 或写出:System.Globalization.DateTimeFormatInfo.InvariantInfo。我更喜欢前者。
  • 前者是第二个?
  • @user5462581:不,第一个使用using 指令。你知道这是什么?你必须把它放在你的班级之上。 msdn.microsoft.com/en-us/library/sf0df423.aspx 但是,如果您只在课堂的一小部分中需要它,则可以使用 System.Globalization.DateTimeStyles.None 中的完全限定名称。这只是可读性的问题。一旦你熟悉了这些命名空间、类和枚举,你就不想到处重复完全限定的名称了。
【解决方案2】:

即使这听起来有点残酷,但您似乎应该对数组/列表、foreach 循环和 DateTime.TryParse 进行一些阅读。

除此之外,您还有不同的可能日期格式,并想查看其中一种是否有效。如果我们从 msdn 主页中获取 tryparse https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx 的示例并使用 foreach 就变得非常简单:

public void addMeeting()
{
    string readAddMeeting;
    var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; // I copied this
    bool isDateOk = false;

    Console.WriteLine("Add a schedule for specific dates: ");

    readAddMeeting = Console.ReadLine();

    foreach (string myDateFormat in dateFormats)
    {
        DateTime dateValue;
        if (DateTime.TryParse(readAddMeeting, dateValue)) 
        {
            isDateOk = true;
        }
    }

    if (isDateOk == false)
    {
        Console.Writeline("Sorry this is not a valid date");
    }
}

【讨论】:

  • 是的,我应该对这些东西做一些阅读。我对编程很陌生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2021-02-13
  • 2017-02-28
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多