使用C#中的自定义用户给定输入计算TimeSpan

本文关键字:输入 计算 TimeSpan 用户 自定义 使用 | 更新日期: 2023-09-27 18:20:52

我想用C#创建一个程序,用于计算两个"自定义用户给定"日期之间的时间跨度。我已经写了一个代码,但它不起作用。请帮忙。

        string a, b, c, d, e, f;
        a = Console.ReadLine();
        b = Console.ReadLine();
        c = Console.ReadLine();
        d = Console.ReadLine();
        e = Console.ReadLine();
        f = Console.ReadLine();
        int g, h, i, j, k, l;
        g = int.Parse(a);
        h = int.Parse(b);
        i = int.Parse(c);
        j = int.Parse(d);
        k = int.Parse(e);
        l = int.Parse(f);
        DateTime FirstDate = DateTime.Parse("g/h/i");
        DateTime SecondDate = DateTime.Parse("j/k/l");
        TimeSpan Difference = SecondDate - FirstDate;
        Console.WriteLine(Difference.ToString());
        Console.ReadLine();

使用C#中的自定义用户给定输入计算TimeSpan

我不明白你在那里试图做什么,但看看这个:

DateTime dt1 = new DateTime(2014,10,10,17,10,00); // 2014-10-10 17:10.00
DateTime dt2 = new DateTime(2014,10,10,13,05,00); // 2014-10-10 13:05.00
var difference = dt1.Subtract(dt2); // 04:05.00

如果两者都是日期时间格式,这将起作用

(SecondDate - FirstDate).TotalDays
//return float

(SecondDate - FirstDate).Days
//returns int

如果您已经强制用户输入单独的日期/月/年,则不应该将它们连接到一个字符串中,然后DateTime.Parse它们-您将面临各种日期格式问题。相反,单独使用它们:

using System;
public class Program
{
    public static void Main()
    {
        string day1 = Console.ReadLine();
        string month1 = Console.ReadLine();
        string year1 = Console.ReadLine();
        string day2 = Console.ReadLine();
        string month2 = Console.ReadLine();
        string year2 = Console.ReadLine();
        DateTime date1 = new DateTime(year: int.Parse(year1), month: int.Parse(month1), day: int.Parse(day1));
        DateTime date2 = new DateTime(year: int.Parse(year2), month: int.Parse(month2), day: int.Parse(day2));
        TimeSpan ts = date2 - date1;
        Console.WriteLine("There are {0} days(s) or {1} hour(s) or {2} minute(s) between those dates", ts.TotalDays, ts.TotalHours, ts.TotalMinutes );
    }
}

或者,您可以让用户输入完整的日期,并解析这些日期:

(...)
        string date1Str = Console.ReadLine();
        string date1Str = Console.ReadLine();
        DateTime date1 = DateTime.Parse(date1Str);
        DateTime date2 = DateTime.Parse(date2Str);
(...)

我想你要做的是:

using System;
public class Program
{
    public static void Main()
    {
        string month1 = Console.ReadLine();
        string day1 = Console.ReadLine();
        string year1 = Console.ReadLine();
        string month2 = Console.ReadLine();
        string day2 = Console.ReadLine();
        string year2 = Console.ReadLine();
        DateTime date1 = DateTime.Parse(string.Format("{0}/{1}/{2}", month1, day1, year1));
        DateTime date2 = DateTime.Parse(string.Format("{0}/{1}/{2}", month2, day2, year2));
        TimeSpan ts = date2 - date1;
        Console.WriteLine("There are {0} days(s) or {1} hour(s) or {2} minute(s) between those dates", ts.TotalDays, ts.TotalHours, ts.TotalMinutes );
    }
}

你可以看到这个节目的真人小提琴!

这假设你是根据月份、日期,然后是年份来阅读日期的。如果你需要一个不同的格式,那么你需要重新安排一些东西,但这应该会给你一个大致的想法。

顺便说一句,如果你的程序有描述性的变量名,世界各地的程序员都会很感激。调用变量abc是不好的做法。生产环境程序中的这种事情会让其他程序员很快踢你的屁股!

编辑:

由于您是以天/月/年的格式输入的,请使用以下格式:

using System;
public class Program
{
    public static void Main()
    {
        string day1 = Console.ReadLine();
        string month1 = Console.ReadLine();
        string year1 = Console.ReadLine();
        string day2 = Console.ReadLine();
        string month2 = Console.ReadLine();
        string year2 = Console.ReadLine();
        DateTime date1 = DateTime.Parse(string.Format("{0}/{1}/{2}", month1, day1, year1));
        DateTime date2 = DateTime.Parse(string.Format("{0}/{1}/{2}", month2, day2, year2));
        TimeSpan ts = date2 - date1;
        Console.WriteLine("There are {0} days(s) or {1} hour(s) or {2} minute(s) between those dates", ts.TotalDays, ts.TotalHours, ts.TotalMinutes );
    }
}