【问题标题】:Timespan between Now and Next Hour?现在和下一小时之间的时间跨度?
【发布时间】:2011-04-20 16:23:10
【问题描述】:

现在是 8:30,我正试图找出从现在到下一个整小时 (9:00) 之间的秒数。我想我只想DateTime.Now.AddHours(1) 但在我这样做之后我认为我需要“地板”。如何获得该值?

谢谢。

【问题讨论】:

    标签: c# datetime timespan


    【解决方案1】:

    以小时为单位将一天中的时间四舍五入到下一个整数值:

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

    【讨论】:

      【解决方案2】:

      这似乎是最简单的:

      3600 - DateTime.Now.TimeOfDay.TotalSeconds % 3600
      

      (如果你想要整数 - 整数 - 然后在 DateTime.Now... 前加上 (int)

      【讨论】:

      • 实际上是:3600 - DateTime.Now.TimeOfDay.TotalSeconds % 3600。但是 +1 是最短的解决方案。
      • @NightDweller 我猜你评论了答案的早期版本。已更正:)
      • :) 这么多不同的解决方案如此之快 - 你一定会错过一些东西。这可能不是一场比赛(它是) - 但我认为你应该赢:)
      • 哦 - 我想你的意思是简单:)
      • @NightDweller 谢谢 :) 不幸的是,英语不是我的母语。
      【解决方案3】:

      //完全误读。完全重写

      我只想做这样的事情

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

      【讨论】:

        【解决方案4】:

        更易读的版本:

        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;
        }
        

        【讨论】:

          【解决方案5】:

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

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

          如果您希望在几秒钟内得到结果,当然可以提取结果 TimeSpanTotalSeconds 组件。

          【讨论】:

          • 这总是等于 1 小时。您需要以某种方式删除会议记录。
          • @smoore:不,它没有。这是正确的。 DateTime.Hour 是一个 int,代表 整个 小时。
          【解决方案6】:
          TimeSpan result =  (new DateTime(DateTime.Now.Year, DateTime.Now.Month, 
          DateTime.Now.Day, DateTime.Now.Hour + 1, 0, 0)).Subtract(DateTime.Now);
          

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

          【讨论】:

            【解决方案7】:

            所以你需要减去“剩余”分钟,找到差值,然后乘以 60,对吗?

            【讨论】:

              【解决方案8】:

              这个怎么样:

               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;
              

              【讨论】:

                【解决方案9】:
                TimeSpan sec = new TimeSpan(0, 0, 3600 - (DateTime.Now.Minute * 60));
                

                【讨论】:

                  【解决方案10】:

                  怎么样:

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

                  或者(也许更清楚):

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

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-10-10
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-12-16
                      • 2023-01-21
                      相关资源
                      最近更新 更多