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