2014-04-01 63 views
1

我要提前說,我是編程的初學者,這個問題可能看起來毫不相關。但是,我真的想知道如何在這種情況下進行。相關循環和閏年c#

這是我的代碼:

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

在此處張貼您的代碼 – thumbmunkeys

+0

並非我們所有人都可以訪問pastebin,您是否也可以發佈代碼? –

+2

我不是C#程序員,但更爲標準的做法是使用可能在'DateTime'類上使用的addYears()方法。 – Bathsheba

回答

0

閏年問題是不是一個真正的感謝Framewrok

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; 
} 
+0

你會如何直接使用'DateTime.IsLeapYear'到10年的時間間隔(提示十年可以包含一個,兩個或三個閏年)。 – Richard

+0

查看最新的答案 – Steve

+0

謝謝。這真的幫助我解決了第二個問題。請注意,你在「?」之前錯過了一個「)」。 – PreslavMihaylov

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)); 

RE,問題2:見DateTime.AddYears如在評論中所指出的Q.

+0

這對第一個問題幫了我很大的忙。謝謝您的回答。 – PreslavMihaylov

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子句,以「捕捉」錯誤。

看到更多細節在這裏(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看到史蒂夫的答案。