推荐

2017-01-03 272 views
2

我需要一种方法来whatsUrBirthDay = Console.ReadLine();推荐

我可以很容易string whatsUrBirthDay;正确的数据类型来存储用户的生日,但我希望能够保存他们的生日,这样我可以“相对”轻松地记得它以后,可能做计算用它。

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

在此先感谢!

编辑我想补充'不',这不是我选择的变量 - 只是这样做,所以你会明白我在问什么。

+0

这个正确的数据类型是'DateTime' –

+0

我熟悉这一点,但它的格式非常具体,它接受日期,对吧? 那么,我会“捕捉”任何与明显格式不匹配的条目,或者它如何工作? – Newbie

回答

0

如评论所述,日期的正确类型为DateTime。你可以实现你想要使用Parse - 方法像什么:

DateTime birthday = DateTime.Parse(Console.ReadLine(), out birthday); 

的DateTime还提供了TryParse - 方法可以用来处理无效输入:

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#并想了解更多关于解析日期/时间的信息,请考虑阅读https://www.dotnetperls.com/datetime-parse,其中解释了最简单的示例(包括错误处理等)的最重要方面

+0

谢谢你的回答。所以成功读取/存储的唯一方法是如果用户以正确的格式输入它,是的? 如果他们没有,它会抛出异常? – Newbie

+0

无论是或者你使用'TryParse'来处理它,就像我在编辑 – nozzleman

+0

中所显示的那样好 - 你的编辑正是我为什么不愿意继续前进的原因。所以TryParse和Parse之间的区别是,一个人强制它,而另一个尝试并抛出一个可捕获的异常,如果无效? – Newbie

1

更好的是提示用户输入日期让它成为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基础上,我们可以显示警告信息

+0

太棒了! CultureInfo.InvariantCulture现在激起了我的兴趣。 :) 但是,我必须问,为什么你只是为了存储“dd-MM-yyyy”而创建一个变量,当你可以在WriteLine中输入它时呢?真的很好奇 - 这是一种好习惯吗?或者如果你以后需要再次使用其他东西,这是一种好习惯吗? – Newbie

+0

有时我可能会在代码中多次使用这些格式,以避免重复键入以及打字错误,我只是使用一个变量来存储该格式。您可以从这里阅读[DateTime.TryParseExact](https:// msdn。 microsoft.com/en-us/library/system.datetime.tryparseexact(v=vs.110).aspx) –

+0

像这样重复使用它? (例如:{1:“+ myDateFormat +”}):“,myDateFormat,new DateTime(1989,02,01));' – Eric