1

私はプログラミングの初心者であり、この質問はまったく無関係に思えるかもしれません。とはいえ、この状況でどうやって進めていくのか、本当に悩みます。

これは私のコードです:

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

dd-mm-yyyy問題 1: コンソールに表示される情報が と異なる場合に、プロセス全体をもう一度繰り返すループを作成したいと考えています。

問題 2: 次の年 (現在の年から) がうるう年かどうかを確認したいので、ts2365 日か 366 日かを知りたい.

前もって感謝します。

4

3 に答える 3

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.AddYearsQのコメントに記載されているように参照してください。

于 2014-04-01T10:12:40.140 に答える
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は、文字列が正しくない場合にエラーをスローします。

これを解決するには、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 については、Steve の回答を参照してください。

于 2014-04-01T10:17:23.017 に答える
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;
}
于 2014-04-01T10:10:00.667 に答える