【问题标题】:Check if user input is a valid date检查用户输入是否为有效日期
【发布时间】:2015-11-05 12:39:18
【问题描述】:

我正在构建一个日历,我想检查用户输入的日期是否有效。我已经做到了这一点,现在我不知道如何重复“无效日期”消息,直到它是有效的。


我的代码:

var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"};

Console.Write("\nSet your date: ");

string readAddMeeting = Console.ReadLine();
DateTime scheduleDate;

bool validDate = DateTime.TryParseExact(
    readAddMeeting,
    dateFormats,
    DateTimeFormatInfo.InvariantInfo,
    DateTimeStyles.None,
    out scheduleDate);

if (validDate)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Valid date");
    Console.ForegroundColor = ConsoleColor.White;
}
else
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting);
    Console.ForegroundColor = ConsoleColor.White;
}

【问题讨论】:

  • 您可以使用while 声明。检查它的文档。
  • 你需要解释你的意思,“如何重复“无效日期”的消息,直到它是一个有效的消息”我不遵循。
  • 你可以使用while。并且您不需要日期格式以及 TryParseExact。相反,您可以简单地使用 TryParse。例如,如果当前文化是 en-US,那么用户可能想要输入“2015 年 1 月 1 日”,这是一个有效日期。
  • 你需要使用while语句...没看到它是一个控制台应用程序,“Console.ReadLine()”
  • 更正我的评论,.Net 框架不够聪明,无法看到 2015 年 1 月 1 日是有效日期。 2015 年 1 月 1 日是。

标签: c# date tryparse


【解决方案1】:

尝试类似:

var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"};

bool validate = true;
while (validate) // Loop indefinitely
{
    Console.Write("\nSet your date: "); // Prompt
    string readAddMeeting = Console.ReadLine(); // Get string from user

    DateTime scheduleDate;
    if(DateTime.TryParseExact(readAddMeeting,dateFormats, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out scheduleDate))
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Valid date");
        validate = false;
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting);
    }
    Console.ForegroundColor = ConsoleColor.White;
}

【讨论】:

  • 当你写while (true)时它总是显示“输入有效日期”,即使你写了一个。
  • 那么工作解决方案是什么?我现在正在尝试很长时间。不知道它是如何工作的 100%。
  • @user5462581 100% 是你是 100% 正确的!自从那条评论以来,我已经更新了。谢谢
  • 什么?我不明白。它仍在无限重复。我想重复消息“输入有效日期”直到用户输入有效日期。
  • @user5462581 这个故事肯定有更多内容,我自己刚刚测试过这个,它有效。照原样把它放在一个新的控制台主中。
【解决方案2】:

使用do/while 循环:

do
{
      ... your code here

}while(!validDate);

【讨论】:

    【解决方案3】:

    使用 do-While 循环:

    do{
    var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"};
    
    Console.Write("\nSet your date: ");
    
    string readAddMeeting = Console.ReadLine();
    DateTime scheduleDate;
    
    bool validDate = DateTime.TryParseExact(
    readAddMeeting,
    dateFormats,
    DateTimeFormatInfo.InvariantInfo,
    DateTimeStyles.None,
    out scheduleDate);
    
    if (validDate)
    {
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Valid date");
    Console.ForegroundColor = ConsoleColor.White;
    }
    else
    {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Invalid date: \"{0}\"", readAddMeeting);
    Console.ForegroundColor = ConsoleColor.White;
    }
    }while(!validDate)
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2017-02-28
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      相关资源
      最近更新 更多