【发布时间】:2011-04-20 16:23:10
【问题描述】:
现在是 8:30,我正试图找出从现在到下一个整小时 (9:00) 之间的秒数。我想我只想DateTime.Now.AddHours(1) 但在我这样做之后我认为我需要“地板”。如何获得该值?
谢谢。
【问题讨论】:
现在是 8:30,我正试图找出从现在到下一个整小时 (9:00) 之间的秒数。我想我只想DateTime.Now.AddHours(1) 但在我这样做之后我认为我需要“地板”。如何获得该值?
谢谢。
【问题讨论】:
以小时为单位将一天中的时间四舍五入到下一个整数值:
var timeOfDay = DateTime.Now.TimeOfDay;
var nextFullHour = TimeSpan.FromHours(Math.Ceiling(timeOfDay.TotalHours));
var delta = (nextFullHour - timeOfDay).TotalSeconds;
【讨论】:
这似乎是最简单的:
3600 - DateTime.Now.TimeOfDay.TotalSeconds % 3600
(如果你想要整数 - 整数 - 然后在 DateTime.Now... 前加上 (int)。
【讨论】:
//完全误读。完全重写
我只想做这样的事情
int minutesToNextHour = 60 - DateTime.Now.Minutes;
int secondsToNextHour = minutesToNextHour * 60;
【讨论】:
更易读的版本:
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;
}
【讨论】:
您不必摆弄天花板和地板。 DateTime.Hour 属性表示由 DateTime 表示的一天中时间的整个小时(它是 0 到 23 之间的整数)。您可以使用此属性和 DateTime.Date 属性来去除您不想要的 DateTime 的组件(分小时数据),然后根据需要减去以生成 TimeSpan。
var now = DateTime.Now;
var timeToNextHour = now.Date.AddHours(now.Hour + 1) - now;
如果您希望在几秒钟内得到结果,当然可以提取结果 TimeSpan 的 TotalSeconds 组件。
【讨论】:
DateTime.Hour 是一个 int,代表 整个 小时。
TimeSpan result = (new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, DateTime.Now.Hour + 1, 0, 0)).Subtract(DateTime.Now);
基本上在这里,您正在构建一个新的 DateTime,它从现在开始一小时,没有分钟或秒,然后您从中减去 Now 并得到结果。
【讨论】:
所以你需要减去“剩余”分钟,找到差值,然后乘以 60,对吗?
【讨论】:
这个怎么样:
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;
【讨论】:
TimeSpan sec = new TimeSpan(0, 0, 3600 - (DateTime.Now.Minute * 60));
【讨论】:
怎么样:
var now = DateTime.Now;
int secondsTillNextHour = (60 - now.Minute)*60+(60-now.Second);
或者(也许更清楚):
int SecondsTillNextHour = 3600 - 60*now.Minute - now.Second;
【讨论】:
我会 Timespan.Parse 08:30,向对象添加 1 小时,然后检索小时部分并构建一个新字符串,其中 :00 作为分钟并重新解析新字符串。可能有更有效的方法来做到这一点,但我发现这种技术一目了然。
【讨论】: