C# Int到datetime或timespan到double

C# Int到datetime或timespan到double,c#,C#,我需要做一个程序,读取4个整数输入 int examHour int examMin int hourArrival int minuteArrival 那么我有三个选择 提前,如果提前30分钟或更长时间。 准时,如果学生准时或提前30分钟 晚了 我知道有一种>

我需要做一个程序,读取4个整数输入

 int examHour
 int examMin
 int hourArrival
 int minuteArrival
那么我有三个选择 提前,如果提前30分钟或更长时间。 准时,如果学生准时或提前30分钟 晚了

我知道有一种><方法可以做到这一点,但我100%确信有一种更智能的DateTime或TimeSpan方法可以做到这一点

如果学生来早了,我就得写信 早{分钟}早不到一小时。 HH:提前一小时或一小时以上开始的mm小时。 迟到{分钟}迟到不到一小时。 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")    
        }
    }
}
使用系统;
实时命名空间
{
班级计划
{
静态void Main(字符串[]参数)
{
int examHour=int.Parse(Console.ReadLine());
int examin=int.Parse(Console.ReadLine());
int hourArrival=int.Parse(Console.ReadLine());
int minuteArrival=int.Parse(Console.ReadLine());
字符串总数=($“{examHour}:{examMin}”);
字符串totald=($“{hourArrival}:{minuteArrival}”);
DateTime arrival=新的日期时间();
arrival=DateTime.ParseExact(总计,“H:m”,空);
DateTime检查=新的DateTime();
exam=DateTime.ParseExact(totald,“H:m”,null);
时间跨度=到达-检查;
整小时=跨度小时;
整数分钟=跨度分钟;
字符串timediff=hours.ToString(“0”)+:“+minutes.ToString(“00”);
字符串minutesdiffOne=minutes.ToString(“00”);
if(examHour
使用系统;
实时命名空间
{
班级计划
{
静态void Main(字符串[]参数)
{
int examHour=int.Parse(Console.ReadLine());
int examin=int.Parse(Console.ReadLine());
int hourArrival=int.Parse(Console.ReadLine());
int minuteArrival=int.Parse(Console.ReadLine());
字符串总数=($“{examHour}:{examMin}”);
字符串totald=($“{hourArrival}:{minuteArrival}”);
DateTime arrival=新的日期时间();
arrival=DateTime.ParseExact(总计,“H:m”,空);
DateTime检查=新的DateTime();
exam=DateTime.ParseExact(totald,“H:m”,null);
时间跨度=到达-检查;
整小时=跨度小时;
整数分钟=跨度分钟;
字符串timediff=hours.ToString(“0”)+:“+minutes.ToString(“00”);
字符串minutesdiffOne=minutes.ToString(“00”);
if(examHour
在我看来,您可以进行计算,完全避免
日期时间
时间跨度

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-exam=examHour+examMin/60.0;
双程到达=小时到达+分钟到达/60.0;
双三角=检查-到达;
字符串状态=增量>0.5?“早”:(增量<0.0?“晚”:“准时”);

这只会创建一个
双精度
,其值为小时,小数点表示分钟。

在我看来,您可以进行计算,并完全避免
日期时间
时间跨度

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-exam=examHour+examMin/60.0;
双程到达=小时到达+分钟到达/60.0;
双三角=检查-到达;
字符串状态=增量>0.5?“早”:(增量<0.0?“晚”:“准时”);

这只会创建一个
double
,值为小时,小数点表示分钟。

注意:没有理由对已经是
DateTime
的对象使用
Convert.ToDateTime
。当您可以通过在构造函数中指定小时和分钟来创建对象时,也没有理由解析小时和分钟的字符串。但是因为这里没有日期,
Timespan
可能更有用。因此,首先尝试执行逻辑,移除不需要的部分,然后看看会发生什么。目前您还没有完成逻辑。但我100%确信有一种更智能的DateTime或TimeSpan方法可以完成此操作,如果您对此有信心,为什么不告诉我们该方法?注意:没有理由在已经是
DateTime
的对象上使用
Convert.ToDateTime
。当您可以通过在构造函数中指定小时和分钟来创建对象时,也没有理由解析小时和分钟的字符串。但是因为这里没有日期,
Timespan
可能更有用。因此,首先尝试执行逻辑,移除不需要的部分,然后看看会发生什么。目前,您还没有完成逻辑。但我100%确信有一种更智能的DateTime或TimeSpan方法可以完成此操作,如果您对此有信心,为什么不告诉我们该方法?仅代码的答案并不被认为是很好的答案。请添加一个解释,说明您所做的事情,使其成为问题的解决方案。仅代码答案不被视为伟大的答案。请添加一个解释,说明您所做的事情,使其成为问题的解决方案。