C# 用C语言编写的地球日计算器#

C# 用C语言编写的地球日计算器#,c#,visual-studio-2015,string-to-datetime,C#,Visual Studio 2015,String To Datetime,我一直在尝试用C#创建一个地球日计算器,用户可以在其中以MM/DD/YYYY格式输入他们的生日,并找出他们在地球上的时间(以天为单位)。我已经检查了一个类似的问题,有人在两年前发布了题为“用户已经活了多少天计算器”。但我的问题在于格式例外。以下是我尝试做的(我对这方面很陌生): 如果有帮助的话,我把以前的尝试都忘了。 出现的错误如下所示: mscorlib.dll中发生类型为“System.FormatException”的未处理异常 其他信息:字符串未被识别为有效的日期时间 虽然当我给它一个字

我一直在尝试用C#创建一个地球日计算器,用户可以在其中以MM/DD/YYYY格式输入他们的生日,并找出他们在地球上的时间(以天为单位)。我已经检查了一个类似的问题,有人在两年前发布了题为“用户已经活了多少天计算器”。但我的问题在于格式例外。以下是我尝试做的(我对这方面很陌生):

如果有帮助的话,我把以前的尝试都忘了。 出现的错误如下所示:

mscorlib.dll中发生类型为“System.FormatException”的未处理异常

其他信息:字符串未被识别为有效的日期时间

虽然当我给它一个字符串文字时,它是有效的,例如“8/10/1995”


另外,如果有帮助的话,我正在使用Visual Studio 2015 Community RC。

您可以尝试以下方法:

string birthDateString = "5/2/1992";
DateTime birthDate;
if (DateTime.TryParse(birthDateString, out birthDate))
{
    DateTime today = DateTime.Now;
    Console.WriteLine("You are {0} days old", (today - birthDate).Days);
}
else Console.WriteLine("Incorrect date format!");

您有两个
Console.ReadLine()语句

您可能需要按enter键两次


卸下第一个
Console.ReadLine()并在您填写日期时起作用。

您将其编码为读取输入两次,第二次是当您使用输入作为日期时,但随后您可能正在按enter键(这不是日期),并且它会产生FormatException。

您应该删除第一个
ReadLine()


您输入的内容格式不正确。我同意上述说法。首先尝试对日期进行硬编码,看看其余代码是否运行。接下来,将解析函数封装在try-catch中。任何与用户输入有关的内容都必须进行错误检查,因为不能保证用户会给出正确的输入。查看此站点,了解有关函数中断的特定文档:您使用什么作为输入?当我用控制台的输入运行你的程序时,它运行没有错误。当它在控制台中弹出时,我使用8/10/1995作为输入。然后你再次按enter键,它会给出异常。这是因为您将其编码为读取输入两次,第二次是当您使用输入作为日期时,但您按enter键(这不是日期),它会给出
FormatException
。这就是为什么它不起作用的原因,尽管@msmolcic answer可能是比原始代码更好的方法,但我想问题是为什么它不起作用,也不是一个完整的解决方案是的,如果我将字符串设置为“5/2/1992”之类的值,它会工作,但当我要求用户以MM/DD/YYYY格式输入自己的生日时,它不会工作。为什么后者不起作用,而前者起作用?
DateTime myBirthday = DateTime.Parse("8/10/1995");
TimeSpan myAge = DateTime.Now.Subtract(myBirthday);
Console.WriteLine("You are " + myAge.TotalDays + " days old!");
Console.ReadLine();
string birthDateString = "5/2/1992";
DateTime birthDate;
if (DateTime.TryParse(birthDateString, out birthDate))
{
    DateTime today = DateTime.Now;
    Console.WriteLine("You are {0} days old", (today - birthDate).Days);
}
else Console.WriteLine("Incorrect date format!");
Console.WriteLine("Welcome to the Days on Earth Finder!" +
"\nPlease input your birthday(MM/DD/YYY):");
//Console.ReadLine();

//string myBirthday = Console.ReadLine();
//DateTime mB = Convert.ToDateTime(myBirthday);
//DateTime myBirthday = DateTime.Parse(Console.ReadLine());
string myBirthday = Console.ReadLine();
DateTime mB = DateTime.Parse(myBirthday);
//This line is where the error occurs
TimeSpan myAge = DateTime.Now.Subtract(mB);

Console.WriteLine("You are " + myAge.TotalDays + " days old!");
Console.ReadLine();