C#减去时间(小时分钟)

C#减去时间(小时分钟),c#,datetime,C#,Datetime,大家好,我有一些有趣的情况 我想计算从20:00到凌晨1:00的时间(以分钟为单位),但我不知道如何计算,因为我所做的是: pabaigosLaikoLaukelis = 01:00; pradziosLaikoLaukelis = 20:00; TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis)- Convert.ToDateTime(pradziosLaikoLaukelis); int minutes = (int)dt.Tota

大家好,我有一些有趣的情况

我想计算从20:00到凌晨1:00的时间(以分钟为单位),但我不知道如何计算,因为我所做的是:

pabaigosLaikoLaukelis = 01:00;
pradziosLaikoLaukelis = 20:00;
TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis)- Convert.ToDateTime(pradziosLaikoLaukelis);
int minutes = (int)dt.TotalMinutes;
我得到的结果->-1140分钟,但我需要答案是20:00到01:00之间的5小时


我知道这很容易,但我不知道怎么做。

您需要指定日期,您正在练习(今天上午1:00)-(今天下午8:00)


我认为您需要使用包含日期部分的完整日期时间字符串(明天1:00 AM)-(今天8:00 PM)

来显示01:00 AM比20:00晚一天-如下所示:

int minutes = Convert.ToDateTime("01/02/2012 01:00").Substract(Convert.ToDateTime("01/01/2012 20:00")).TotalMinutes;

您需要在第一个
TimeSpan
中添加一天,并使用
TotalHours

var pabaigosLaikoLaukelis = "01:00";
var pradziosLaikoLaukelis = "20:00";
var oneDayTimeSpan = new TimeSpan(1, 0, 0, 0);
TimeSpan dt = TimeSpan.Parse(pabaigosLaikoLaukelis).Add(oneDayTimeSpan) - TimeSpan.Parse(pradziosLaikoLaukelis);
int minutes = (int)dt.TotalHours; // 5 hours
使用关联操作:

var pabaigosLaikoLaukelis = "21:00";
var pradziosLaikoLaukelis = "20:00";
var leftHours = (int)TimeSpan.Parse(pabaigosLaikoLaukelis).TotalHours;
var rightHours = (int)TimeSpan.Parse(pradziosLaikoLaukelis).TotalHours;
// Now we do a Modulus operation which will assure
// 23 > hours > 0
// Make sure to check that leftHours != 0 or rightHours != 0
int hours = (Math.Abs(leftHours * rightHours) + leftHours) % rightHours; //Modulus
var hoursTimeSpan = TimeSpan.FromHours(hours);

请注意在结束时间中添加一天,因为这样20:00和22:00之间的差值将是26小时,而不是2小时

只需检查差异是正(当天)还是负(第二天)

string pabagoslaikolaukelis=“01:00”;
字符串pradziosLaikoLaukelis=“20:00”;
//这应该是5个小时
TimeSpan dt=Convert.ToDateTime(pabaigosLaikoLaukelis)-Convert.ToDateTime(pradziosLaikoLaukelis);
整小时=(整)dt.TotalHours;
小时=小时<0?24小时以上:小时;
//这应该是19个小时
dt=转换ToDateTime(pradziosLaikoLaukelis)-转换ToDateTime(pabaigosLaikoLaukelis);
小时=(int)dt.TotalHours;
小时=小时<0?24小时以上:小时;

在尝试数据计算之前,需要准备两个字符串变量

string pabaigosLaikoLaukelis = "01:00";
string pradziosLaikoLaukelis = "20:00";
pabaigosLaikoLaukelis = DateTime.Today.ToString("dd/MM/yyyy") + " " + pabaigosLaikoLaukelis;
pradziosLaikoLaukelis = DateTime.Today.AddDays(-1).ToString("dd/MM/yyyy") + " " + pradziosLaikoLaukelis;

TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis) - Convert.ToDateTime(pradziosLaikoLaukelis);
Console.WriteLine("{0:D2}:{1:D2}", dt.Hours, dt.Minutes);

你可以这样做

        //Datetime(Year,month,day,hour,min,sec)
        DateTime date1 = new DateTime(2012, 1, 1, 20, 0, 0);
        DateTime date2 = new DateTime(2012, 1, 2, 1, 0, 0);
        string minutes = (date2.Subtract(date1).TotalMinutes).ToString();
测试并工作300分钟(5小时)

这个怎么样:

pabaigosLaikoLaukelis = 01:00;
pradziosLaikoLaukelis = 20:00;
TimeSpan startTime = Convert.ToDateTime(pradziosLaikoLaukelis).TimeOfDay;
TimeSpan endTime = Convert.ToDateTime(pabaigosLaikoLaukelis).TimeOfDay;
TimeSpan diff = endTime > startTime ? endTime - startTime : endTime - startTime + TimeSpan.FromDays(1);
int minutes = (int)diff.TotalMinutes;

您正在跨越日期边界(今天凌晨1点到晚上8点)。如果你不提供这些信息,C#永远不会知道。结果是正确的。您需要确保从明天开始的时间实际上是正确的日期。尝试在第一次Convert.ToDateTime.的结果中添加一天,并使用
TotalHours
而不是
TotalMinutes
我不知道这是否只是为了这个问题。您应该使用例如
TimeSpan.FromHours(hours)
或其构造函数之一创建
TimeSpan
。不要使用字符串。20到01 AM不是其表示的AM/PM是12/12小时制,而20属于24小时制。如果结束时间是21:00,这将给他25小时而不是1小时。是的,因为时间运算没有关联性。在这一点上最好只使用数学。@caerolus我提供了一个例子。如果你想,你可以使用with TimeStamp来减去小时和分钟。问题是减去两个日期时间之间以分钟为单位的句点。不从日期时间中减去时间段,例如分钟。
pabaigosLaikoLaukelis = 01:00;
pradziosLaikoLaukelis = 20:00;
TimeSpan startTime = Convert.ToDateTime(pradziosLaikoLaukelis).TimeOfDay;
TimeSpan endTime = Convert.ToDateTime(pabaigosLaikoLaukelis).TimeOfDay;
TimeSpan diff = endTime > startTime ? endTime - startTime : endTime - startTime + TimeSpan.FromDays(1);
int minutes = (int)diff.TotalMinutes;