我要提前说,我是编程的初学者,这个问题可能看起来很无关紧要。但是,我真的很想知道如何在这种情况下继续前进。
这是我的代码:
string startdate;
Console.WriteLine("Please, type in your birthdate (dd-mm-yyyy)");
startdate = Console.ReadLine();
DateTime bday = DateTime.Parse(startdate);
// prob 1.
DateTime now = DateTime.Now;
TimeSpan ts1 = now.Subtract(bday);
DateTime dt = new DateTime(0001, 01, 01);
TimeSpan ts2 = new TimeSpan(365, 0, 0, 0);
//prob2.
TimeSpan ts3 = new TimeSpan(3650, 0, 0, 0);
dt = dt + ts1 - ts2;
Console.WriteLine("Your current age is:{0}", dt.ToString("yy"));
dt = dt + ts3;
Console.WriteLine("Your Age after 10 years will be:{0}", dt.ToString("yy"));
问题1:我想创建一个循环,如果控制台中给出的信息与dd-mm-yyyy
不同,则重复整个过程。
问题2:我想看看明年(从当前的一年)是否是闰年,因此知道ts2
是否应该是365天或366。
提前谢谢。
答案 0 :(得分:1)
重新。问题1:
看看DateTime.TryParseExact
:这允许你指定一种格式,而不是抛出异常,在输入格式不匹配时返回false。因此
DateTime res;
String inp;
do {
inp = Console.ReadLine("Date of birth: ");
} while (!DateTime.TryParseExact(inp, "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.None, out res));
重新,问题2:请参阅Q上的评论中提到的DateTime.AddYears
。
答案 1 :(得分:0)
由于框架
,闰年问题并不是真正的问题int daysToAdd = 0;
for(int i = 1; i <= 10; i++)
daysToAdd += (DateTime.IsLeapYear(DateTime.Today.Year + i) ? 366 : 365);
第一个问题可以用
解决DateTime inputDate;
while(true)
{
Console.WriteLine("Please, type in your birthdate (dd-mm-yyyy)");
string startdate = Console.ReadLine();
if(DateTime.TryParseExact(startdate, "dd-MM-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out inputDate))
break;
}
答案 2 :(得分:0)
问题1:
可以使用while循环解决。
while(!DateTime.Parse(startdate))// The "!" is for NOT
{
Console.WriteLine("Incorrect format please type your birthday again(dd-mm-yyyy)");
startdate = Console.ReadLine();
}
但是这会带来另一个问题DateTime.Parse会在字符串不正确时抛出错误。(http://msdn.microsoft.com/en-us/library/1k1skd40%28v=vs.110%29.aspx)
为了解决这个问题,你需要使用try catch子句来捕捉&#34;错误。
在此处查看更多详情(http://msdn.microsoft.com/en-us/library/0yd65esw.aspx) 因此代码将如下所示:
bool isCorrectTime = false;
while(!isCorrectTime) // The "!" is for NOT
{
try
{
Console.WriteLine("Incorrect format please type your birthday again(dd-mm-yyyy)");
startdate = Console.ReadLine();
isCorrectTime = true; //If we are here that means that parsing the DateTime
// did not throw errors and therefore your time is correct!
}
catch
{
//We leave the catch clause empty as it is not needed in this scenario
}
}
问题2见史蒂夫的答案。