现在和下一个小时之间的时间跨度?

时间:2011-04-20 16:23:10

标签: c# datetime timespan

现在是8:30,我想知道从现在到下一个整个小时(9:00)之间有多少秒。我想我只想DateTime.Now.AddHours(1),但在我这样做后,我认为我需要“地板”。如何获得这个价值?

感谢。

11 个答案:

答案 0 :(得分:18)

将时间以小时为单位计算到下一个整数值:

var timeOfDay = DateTime.Now.TimeOfDay;
var nextFullHour = TimeSpan.FromHours(Math.Ceiling(timeOfDay.TotalHours));
var delta = (nextFullHour - timeOfDay).TotalSeconds;

答案 1 :(得分:5)

//完全误读。完全重写

我会做这样的事情

int minutesToNextHour = 60 - DateTime.Now.Minutes;
int secondsToNextHour = minutesToNextHour * 60;

答案 2 :(得分:4)

这似乎是最简单的:

3600 - DateTime.Now.TimeOfDay.TotalSeconds % 3600

(如果你想要整数 - 整数 - 那么前缀DateTime.Now...(int)

答案 3 :(得分:3)

您不必乱七八糟地使用天花板和地板。 DateTime.Hour属性表示由DateTime表示的时间的整个小时(它是0和23的整数)。您可以使用此属性和DateTime.Date属性去除您不想要的DateTime的组件(小时数据),然后根据需要减去以生成TimeSpan

var now = DateTime.Now;
var timeToNextHour = now.Date.AddHours(now.Hour + 1) - now;

如果您想在几秒钟内得到结果,您当然可以提取结果TotalSeconds的{​​{1}}组件。

答案 4 :(得分:1)

所以你需要减去“剩余”分钟,找出差异,并将其乘以60,对吗?

答案 5 :(得分:1)

怎么样:

var now = DateTime.Now;
int secondsTillNextHour = (60 - now.Minute)*60+(60-now.Second);

或(可能更清楚):

int SecondsTillNextHour = 3600 - 60*now.Minute - now.Second;

答案 6 :(得分:1)

这个怎么样:

 var currentTime = DateTime.Now;
 var hour = currentTime.AddHours(1).Hour;
 var newTime = Convert.ToDateTime(hour + ":00");
 var timespan = newTime.Subtract(currentTime);
 var secondsDiff = timespan.TotalSeconds;

答案 7 :(得分:1)

TimeSpan sec = new TimeSpan(0, 0, 3600 - (DateTime.Now.Minute * 60));

答案 8 :(得分:1)

TimeSpan result =  (new DateTime(DateTime.Now.Year, DateTime.Now.Millisecond, 
DateTime.Now.Day, DateTime.Now.Hour + 1, 0, 0)).Subtract(DateTime.Now);

基本上你在这里建立一个新的DateTime,从现在开始一小时,没有分钟或秒,然后你从中减去Now并得到你的结果。

答案 9 :(得分:0)

我会Timespan.Parse 08:30,向对象添加1小时,然后检索小时部分并构建一个新的字符串,其中:00作为分钟并重新分析新字符串。可能有一种更有效的方法可以做到这一点,但我发现这种技术很清楚。

答案 10 :(得分:0)

更易阅读的版本:

public double SecondsToNextHour()
{
  return SecondsToNextHour( DateTime.Now );
}

public double SecondsToNextHour( DateTime moment )
{
  DateTime currentHour = new DateTime( moment.Year, moment.Month, moment.Day, moment.Hour, 0, 0 );
  DateTime nextHour = currentHour.AddHours( 1 );
  TimeSpan duration = nextHour - moment;
  return duration.TotalSeconds;
}