プログラミング演習Ⅲ(2023)

【課題1-03】日付時刻に関連する操作

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_1_03
ソリューション名PET1
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

_のテンプレートでは,あらかじめDateTime型の変数が二つ宣言されている.変数名はegghamである. この二つのDateTime型の変数の値に基づいて,以下のように場合分けして表示するプログラムを作成せよ.

  • 変数egghamよりも過去の日時である場合:
    • eggham期間分前です」と表示する.
  • 変数egghamよりも未来の日時である場合:
    • eggham期間分後です」と表示する.
  • 変数egghamが同じ日時の場合:
    • egghamと同じ日時です」と表示する.

出力フォーマットの詳細は以下の_を参照せよ.

変数egghamよりも過去の日時である場合:
eggham期間分前です
変数egghamよりも未来の日時である場合:
eggham期間分後です
変数egghamが同じ日時の場合:
egghamと同じ日時です
  • 凡例
    • egg
      • 変数eggのその時点での内容.必ず変数eggの内容がここに表示されるようにすること.決め打ちにしてはならない.
      • 年4桁-月2桁-日2桁 時2桁(24時間制):分2桁」のフォーマットで表示する(日付と時刻の間に半角スペースがひとつ入るので注意せよ).
    • ham
      • 変数hamのその時点での内容.必ず変数hamの内容がここに表示されるようにすること.決め打ちにしてはならない.
      • 年4桁-月2桁-日2桁 時2桁(24時間制):分2桁」のフォーマットで表示する(日付と時刻の間に半角スペースがひとつ入るので注意せよ).
      • 文言."は"
      • 文言."の"
    • 期間
      • 二つの日時の差(正の数).で表示する.
    • 分前です
      • 文言."分前です"
    • 分後です
      • 文言."分後です"
    • と同じ日時です
      • 文言."と同じ日時です"
出力フォーマット

なお,仮に変数の内容が変更されたとしても正しく動作するようにすること.

プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).

テンプレートコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
namespace Prac_1_03
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 二つの DateTime 型の変数
            DateTime egg = GetRandomDate(); // 日時1(変更してはならない)
            DateTime ham = GetRandomDate(); // 日時2(変更してはならない)

            if (/** 空欄1: 変数 egg が ham よりも過去の日時である場合 **/)
            {
                /**************************************************/
                /*                                                */
                /* 空欄2: ↑の場合の表示処理                      */
                /*                                                */
                /**************************************************/
            }
            else if (/** 空欄3: 変数 egg が ham よりも未来の日時である場合 **/)
            {
                /**************************************************/
                /*                                                */
                /* 空欄4: ↑の場合の表示処理                      */
                /*                                                */
                /**************************************************/
            }
            else // それ以外の場合(⇔ 変数 egg , ham が同じ日時の場合)
            {
                /**************************************************/
                /*                                                */
                /* 空欄5: ↑の場合の表示処理                      */
                /*                                                */
                /**************************************************/
            }
        }// end of Main()

        #region ここは決して変更しないこと
        static Random sRandom = new Random(162); // 【★】
        static long NextLong(long max)
        {
            var bin = new byte[7];
            sRandom.NextBytes(bin);
            return (((long)bin[0]) | ((long)bin[1] << 8) | ((long)bin[2] << 16) | ((long)bin[3] << 24)
                    | ((long)bin[4] << 32) | ((long)bin[5] << 40) | ((long)bin[6] << 48)) % max;
        }
        static DateTime GetRandomDate() => new DateTime(638291664000000000 + ((NextLong(864000000000) / 600000000) * 600000000));
        #endregion

    }// end of class Program
}// end of namespace

正しく実装できた場合,実行結果は_のようになる。

2023-09-01 21:24は2023-09-02 01:07の223分前です
実行結果
他の日時の組み合わせを試すには

_のテンプレートコードでは,三つのケース(egghamより前,後,同値)のうち一つしか試すことはできない. テンプレートコードで 【★】 を付けた行を書き換えれば他の二つのケースの動作を試すことができる(提出時は_の内容に戻しておくこと).

変数egghamよりも過去の日時である場合:

これがテンプレートコードのデフォルトの記述内容である.【★】の行を「static Random sRandom = new Random(162);」に書き換えると出力結果は_のようになる.

2023-09-01 21:24は2023-09-02 01:07の223分前です
実行結果1(再掲)
変数egghamよりも未来の日時である場合:

【★】の行を「static Random sRandom = new Random(972);」に書き換えると出力結果は_のようになる.

2023-09-02 00:15は2023-09-01 23:20の55分後です
実行結果1(再掲)
変数egghamが同じ日時の場合:

【★】の行を「static Random sRandom = new Random(1301);」に書き換えると出力結果は_のようになる.

2023-09-02 06:58は2023-09-02 06:58と同じ日時です
実行結果1(再掲)
他の日時の組み合わせを試すには : 閉じる

ヒント

Last updated on 2023-10-16
Published on 2023-10-16

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.