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

时间:2013-03-28 12:12:12

标签: c# datetime

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

我想计算从20:00到凌晨01: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个小时。

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

7 个答案:

答案 0 :(得分:4)

你可以做这样的事情

        //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小时)

答案 1 :(得分:3)

使用包含日期部分的完整日期时间字符串,以显示01:00 AM比晚于20:00的一天 - 如下所示:

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

答案 2 :(得分:0)

你需要指定日,你要减去(今天凌晨1点) - (今天晚上8点)

我认为你需要减去(明天凌晨1点) - (今天晚上8点)

答案 3 :(得分:0)

您需要在第一个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);

答案 4 :(得分:0)

小心将一天添加到endTime,因为那时20:00和22:00之间的差异将是26小时而不是2小时!

检查差异是正面(同一天)还是负面(第二天)

string pabaigosLaikoLaukelis = "01:00";
string pradziosLaikoLaukelis = "20:00";
// This should be 5 hours
TimeSpan dt = Convert.ToDateTime(pabaigosLaikoLaukelis) - Convert.ToDateTime(pradziosLaikoLaukelis);
int hours = (int)dt.TotalHours;
hours = hours < 0 ? 24 + hours : hours;
// This should be 19 hours
dt = Convert.ToDateTime(pradziosLaikoLaukelis) - Convert.ToDateTime(pabaigosLaikoLaukelis);
hours = (int)dt.TotalHours;
hours = hours < 0 ? 24 + hours : hours;

答案 5 :(得分:0)

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

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);

答案 6 :(得分:0)

这个怎么样:

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;