C# 建议正确的数据类型以存储用户';生日

C# 建议正确的数据类型以存储用户';生日,c#,visual-studio-2015,C#,Visual Studio 2015,我需要一种方法来whatsrbirthday=Console.ReadLine() 我可以轻松地string whatsrbirthday但是我希望能够存储他们的生日,这样我以后可以“相对”轻松地回忆起它,并可能用它进行计算 是否有这样一种数据类型允许特定格式的MM/DD/YYYY?我假设我可以把月份作为字符串,然后在后面寻找匹配拼写或数字的=某个变量,但肯定有更简单的方法吗 提前谢谢 编辑我想加上“否”,这不是我选择的变量-只是这样做,以便您理解我的要求 如注释中所述,日期的正确类型为Date

我需要一种方法来
whatsrbirthday=Console.ReadLine()

我可以轻松地
string whatsrbirthday但是我希望能够存储他们的生日,这样我以后可以“相对”轻松地回忆起它,并可能用它进行计算

是否有这样一种数据类型允许特定格式的MM/DD/YYYY?我假设我可以把月份作为字符串,然后在后面寻找匹配拼写或数字的=某个变量,但肯定有更简单的方法吗

提前谢谢


编辑我想加上“否”,这不是我选择的变量-只是这样做,以便您理解我的要求

如注释中所述,日期的正确类型为
DateTime
。您可以使用-方法实现您想要的:

DateTime birthday = DateTime.Parse(Console.ReadLine(), out birthday);
DateTime还提供了一个-方法,可用于处理无效输入:

DateTime birthday;

// error handling similar to the following (if-clause work fine to)
while(!DateTime.TryParse(Console.ReadLine())) 
{
    Console.WriteLine("Invalid input, try again.");
}

如果您是C语言的新手,想了解更多关于解析日期/时间的信息,请考虑用简单示例(包括错误处理等)来解释最重要的方面(

> P>),您最好提示用户以某种特定的格式输入日期。让它成为
dd-MM-yyyy
,并显示一个示例,以便您可以验证输入并存储到DateTime变量;请参阅下面的代码:

string myDateFormat = "dd-MM-yyyy";
Console.WriteLine("Enter your Birth Date in the format {0} \n (example : {1}) : ",myDateFormat,DateTime.Today.ToString(myDateFormat));
DateTime userBirthday;
if (DateTime.TryParseExact(Console.ReadLine(), myDateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out userBirthday))
{
    Console.WriteLine("You lived {0} days from {1} ", (DateTime.Today - userBirthday).TotalDays, userBirthday.ToString(myDateFormat));
}
else
{
    Console.WriteLine("Wrongly formated input");
}

注意:如果输入不是所需的格式,那么
TryParseExact
将返回false,因为我们可以显示警告消息

正确的数据类型,因为这是
DateTime
我对此很熟悉,但它接受日期的格式非常具体,对吗?那么,我是否会捕捉到任何与明显格式不匹配的条目,或者这是如何工作的呢?谢谢您的回答。因此,要成功地读取/存储它,唯一的方法是,如果用户以完全正确的格式键入它,是吗?如果他们没有这样做,它会抛出一个异常?要么这样,要么你用
TryParse
处理它,就像我的编辑一样好吧-你的编辑正是我不愿意继续这个的原因。因此,TryParse和Parse之间的区别在于,一个强制执行,而另一个尝试并在输入无效时抛出可捕获的异常?
Parse
在输入无效时抛出异常,
TryParse
不抛出异常,但在输入无效时返回
false
。对于用户输入, TyPARSE可能是您想要使用的,也可以考虑阅读,这解释了数据解析相当简洁,这太棒了!现在,CultureInfo.InvariantCulture引起了我的兴趣但是,我不得不问,为什么创建一个变量只是为了存储“dd-MM-yyyy”,而您本来可以在WriteLine中输入它呢?真的很好奇——这是一个好习惯,还是为了防止将来在其他事情上再次需要它,等等?有时我可能会在代码中多次使用这些格式,以避免重复键入和打字错误。我只是使用了一个变量来存储这些格式,您可以从这里了解更多关于像这样重用它的信息
Console.WriteLine(“以{0}格式输入您的出生日期\n(例如:{1:“+myDateFormat+”}):”,myDateFormat,new DateTime(1989,02,01))@un幸运的是它很好,但我猜新生婴儿还不知道如何阅读:)