以小时显示两个日期时间值之间的差异

时间:2011-02-09 14:39:45

标签: c# asp.net-mvc-2 datetime timespan

我正从数据库中检索两个日期时间值。一旦检索到值,我需要两个值之间的差异。 为此,我创建了一个时间跨度变量来存储2个日期值的差异。

TimeSpan? variable = datevalue1 - datevalue2;

现在我需要以小时数的形式显示存储在Timespan变量中的差异。 我提到TimeSpan.TotalHours但由于某种原因无法应用同样的问题。 我怎么做? 我在MVC项目上使用C#。我只需要以小时显示差异值吗?

修改: 由于时间跨度可以为空,我无法使用总小时数属性。现在我可以通过做TimeSpanVal.Value.TotalHours ;

来使用它

8 个答案:

答案 0 :(得分:168)

您可能还想查看

var hours = (datevalue1 - datevalue2).TotalHours;

答案 1 :(得分:110)

我认为您感到困惑,因为您尚未声明TimeSpan您已声明TimeSpan? nullable TimeSpan。如果您不需要问号可以删除问号,请使用variable.Value.TotalHours

答案 2 :(得分:75)

在示例中,我们创建了两个日期时间对象,一个具有当前时间,另一个具有75秒添加到当前时间。然后我们将在第二个DateTime对象上调用方法.Subtract()。这将返回TimeSpan对象。 获得TimeSpan对象后,我们可以使用TimeSpan的属性来获取实际的小时,分​​钟和秒。

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

结果:

  

时差(秒):15   时差(分钟):1   时差(小时):0   时差(天):0

答案 3 :(得分:38)

你有没有理由使用Nullable

如果您想使用Nullable,则可以撰写variable.Value.TotalHours

或者你可以写:(datevalue1 - datevalue2).TotalHours

答案 4 :(得分:7)

这是在C#...中减去两个日期的另一个例子。

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 

答案 5 :(得分:2)

员工付费时间或其他精确要求的更精确方式:

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

https://dotnetfiddle.net/tVIoVJ

答案 6 :(得分:0)

var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)
如果我们比较两个不同的日期,

还可以添加日期之间的差异

new TimeSpan(24 * days, 0, 0)

答案 7 :(得分:0)

哇,我得说:保持简单:

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

和:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

DateTime对象具有所有内置逻辑来处理布尔结果。