Board logo

標題: C# 7 409 計算日期差距 [打印本頁]

作者: may    時間: 2024-1-8 22:32     標題: C# 7 409 計算日期差距

TQC+ 物件導向程式語言
最新一次更新時間:2024-01-05 15:02:39

1. 題目說明:
請新增一個主控台應用程式,加入C:\ANS.CSF\CS04資料夾中的CSD04.cs進行編寫。依下列題意進行作答:輸入兩個日期,計算兩日期的差距,將計算後的年、月、日代入,使輸出值符合題意要求。檔案名稱請另存新檔為CSA04.cs,儲存於C:\ANS.CSF\CS04資料夾,再進行評分。

2. 設計說明:
請撰寫程式,讓使用者輸入兩個8位數的整數,第一個做為出生日期、第二個做為當天日期。計算此兩個日期之間的日期差距,輸出年齡如【6y:1m:23d】,分別將計算後的年、月、日代入。若輸入文字、無法轉換或出生日期大於當天日期等,請輸出【error】。
* 提示:使用DateTime.ParseExact()方法。

3. 輸入輸出:
輸入說明
兩個8位數的整數,分別代表出生日期及當天日期

輸出說明
日期差距(輸出最後一行後不自動換行)

範例輸入1
20130505
20190628
範例輸出1
6y:1m:23d

範例輸入2
20200115
19880327
範例輸出2
error

4. 評分項目:
(1) 符合設計說明輸出正確格式                配分20
作者: may    時間: 2024-1-9 09:38

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. using System.Globalization;

  7. namespace CSA04
  8. {
  9.     class CSA04
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             try
  14.             {
  15.                 //TODO
  16.                 DateTime startDay = DateTime.ParseExact(
  17.                     Console.ReadLine(), "yyyyMMdd",
  18.                     CultureInfo.InvariantCulture);
  19.                 DateTime endDay = DateTime.ParseExact(
  20.                     Console.ReadLine(), "yyyyMMdd",
  21.                     CultureInfo.InvariantCulture);

  22.                 // checking the arguments
  23.                 if (startDay > endDay)
  24.                 {
  25.                     throw new ArgumentException(
  26.                         "startDay should be less than endDay");
  27.                 }

  28.                 int years = endDay.Year - startDay.Year;
  29.                 int months = endDay.Month - startDay.Month;
  30.                 int days = endDay.Day - startDay.Day;

  31.                 if (days < 0)
  32.                 {
  33.                     months -= 1;

  34.                     // newMonth: the first day of the next month (from startDay)
  35.                     // In this way, we could calculate the diff
  36.                     // without concidering the leap month, 30/31 days
  37.                     int newMonth_Year = startDay.Year;
  38.                     int newMonth_Month = startDay.Month + 1;
  39.                     int newMonth_Day = startDay.Day;
  40.                     if (newMonth_Month > 12)
  41.                     {
  42.                         newMonth_Month = 1;
  43.                         newMonth_Year += 1;
  44.                     }
  45.                     DateTime newMonthDay = new DateTime(
  46.                         newMonth_Year, newMonth_Month, newMonth_Day);
  47.                     days = (newMonthDay - startDay).Days;
  48.                     days += (endDay.Day - newMonthDay.Day);
  49.                 }
  50.                 if (months < 0)
  51.                 {
  52.                     months += 12;
  53.                     years -= 1;
  54.                 }
  55.                 Console.Write("{0}y:{1}m:{2}d",years, months, days);
  56.             }
  57.             catch
  58.             {
  59.                 Console.Write("error");
  60.             }
  61.             Console.ReadKey();
  62.         }
  63.     }
  64. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2