整数到日期时间或时间跨度翻倍

时间:2019-04-27 05:05:39

标签: c#

我需要编写一个读取4个整数输入的程序。

 int examHour
 int examMin
 int hourArrival
 int minuteArrival

那么我有3个选择 提早,如果提早30分钟或更长时间。 准时,如果学生准时或提前30分钟 迟到了。

我知道有一种>方法可以做到这一点,但我100%肯定有一种更聪明的DateTime或TimeSpan方法来实现。

如果学生还早,我必须写 提早{minutes}提早不到一个小时。 HH:mm小时开始之前一个小时或更长时间。 晚{minutes}晚不到不到一个小时。 HH:mm小时迟到一个小时或更长时间。

namespace OnTime
{
    class Program
    {
        static void Main(string[] args)
        {
            int examHour = int.Parse(Console.ReadLine());
            int examMin  = int.Parse(Console.ReadLine());
            int hourArrival = int.Parse(Console.ReadLine());
            int minuteArrival = int.Parse(Console.ReadLine());

            string total = ($"{examHour}:{examMin}");
            string totald = ($"{hourArrival}:{minuteArrival}");


            DateTime arrival = new DateTime();
            arrival = DateTime.ParseExact(total, "H:m", null);
            string resultone = (arrival.ToString("H:mm"));

            DateTime exam = new DateTime();
            exam = DateTime.ParseExact(totald, "H:m", null);
            string resulttwo = (exam.ToString("H:mm"));

            DateTime starttime = Convert.ToDateTime(arrival);
            DateTime arrivaltime = Convert.ToDateTime(exam);

            Console.WriteLine ($"Early {HH:mm} before start")
            Console.WriteLine ($"Late {HH:mm} after start")    
        }
    }
}

2 个答案:

答案 0 :(得分:0)

using System;

namespace OnTime
{
    class Program
    {
        static void Main(string[] args)
        {
            int examHour = int.Parse(Console.ReadLine());
            int examMin  = int.Parse(Console.ReadLine());
            int hourArrival = int.Parse(Console.ReadLine());
            int minuteArrival = int.Parse(Console.ReadLine());

            string total = ($"{examHour}:{examMin}");
            string totald = ($"{hourArrival}:{minuteArrival}");

            DateTime arrival = new DateTime();
            arrival = DateTime.ParseExact(total, "H:m", null);

            DateTime exam = new DateTime();
            exam = DateTime.ParseExact(totald, "H:m", null);

            TimeSpan span = arrival - exam;
            int hours = span.Hours;
            int minutes = span.Minutes;
            string timediff = hours.ToString("0") + ":" + minutes.ToString("00");
            string minutesdiffOne = minutes.ToString("00");

            if (examHour < hourArrival && (examMin - minuteArrival < 30))
            Console.WriteLine("on time");
            Console.WriteLine($"{minutesdiff:F0}");
        }
    }
}


答案 1 :(得分:0)

在我看来,您可以进行计算,而完全避免使用DateTimeTimeSpan

double exam = examHour + examMin / 60.0;
double arrival = hourArrival + minuteArrival / 60.0;

double delta = exam - arrival;

string status = delta > 0.5 ? "Early" : (delta < 0.0 ? "Late" : "On time");

这只会创建一个double,其值为小时,十进制分数代表分钟。