从24小时减去时间跨度

时间:2017-03-27 14:08:17

标签: c# datetime timespan

我试图从24小时中减去潜在的负时间跨度值,将其更改为正值。

作为一个例子:

我想知道有多少时间到早上8点。

如果现在是下午16:00,时间跨度给了我-8 ish值,所以我想从24减去它得到16。

我正在尝试这个,但它给了我这个错误

  

日历中不支持字符串表示的DateTime   System.Globalization.GregorianCalendar。

我尝试了什么;

string startTime = String.Format("{0:t}", "8:00");

TimeSpan timeLeft = Convert.ToDateTime(startTime).Subtract(DateTime.Now);

if (timeLeft.TotalMinutes < 0 )
{
    timeLeft = Convert.ToDateTime(String.Format("{0:H}","24:00")).Subtract(Convert.ToDateTime(timeLeft.Negate())) ;
}

如何从24小时内减去潜在的负时间?

4 个答案:

答案 0 :(得分:2)

您感到困惑TimeSpanDateTime。我想有一种更简单的方法:

var eightOClock = TimeSpan.FromHours(8);
var now = DateTime.Now;

var till8again = now.TimeOfDay > eightOClock 
                 ? TimeSpan.FromHours(32) - now.TimeOfDay 
                 : eightOClock - now.TimeOfDay;

因此,如果TimeOfDay小于8小时(在早上8点之前),我们将差异调到早上8点。如果它大于上午8点,我们将差值缩小到32小时,即明天上午8点。

答案 1 :(得分:1)

日期时间是绝对日期,发生在某一天,某个月,一年......它不能用于表示特定小时。 所以你试图转换&#34; 8:00&#34;或&#34; 24:00&#34;在DateTime中将强行失败。

为此,您必须使用TimeSpan(如果您总是使用小时,则最终使用整数)。

您可以使用例如

if(DateTime.Now.TimeOfDay > TimeSpan.FromHours(8)) 

查看它是否多于或少于8:00。

TimeOfDay将返回自午夜以来今天所经过的时间。

DateTime还有很多有用的方法来添加或减去时间,详见https://msdn.microsoft.com/fr-fr/library/system.datetime(v=vs.110).aspx

答案 2 :(得分:1)

使用TimeSpan,如果startDate小于Now,请为其添加一天,然后进行比较。

TimeSpan startTime = new TimeSpan(8,0,0);
TimeSpan now = DateTime.Now.TimeOfDay;

startTime = startTime < now ? startTime.Add(TimeSpan.FromDays(1)) : startTime;
TimeSpan diff = startTime - now;

答案 3 :(得分:0)

另一点:错误来自于24:00不表示午夜12:00的事实。 0:00代表午夜,这将是一个有效的DateTime。

相关问题