【问题标题】:Days, hours, minutes, seconds between two dates两个日期之间的天、小时、分钟、秒
【发布时间】:2012-05-19 06:59:54
【问题描述】:

我有两个约会,一个比另一个少。我想创建一个这样的字符串

“0天0小时23分18秒”

表示两个日期之间的差异。我怎样才能得到这个字符串的这些元素?

【问题讨论】:

  • 谢谢大家 - 我希望我能接受你所有的答案,但这是不允许的,所以我赞成你所有的答案。

标签: c# .net datetime


【解决方案1】:

不要忘记,如果您希望此计算可移植,则需要将其存储为 UTC,然后在显示时将其转换为本地时间。作为一般规则,将日期存储为 UTC 并转换为本地时间以进行演示。

【讨论】:

    【解决方案2】:
    TimeSpan diffTime = dateTimeNew -PreviousDate;
    int days=diffTime.Days;
    int hours=diffTime.Hours;
    int minutes=diffTime.Minutes;
    int seconds=diffTime.Seconds;
    

    【讨论】:

    • OP 想要根据计算结果构建一个字符串。您的答案中缺少该部分。
    【解决方案3】:

    当您从另一个中减去一个 DateTime 时,您会得到一个 TimeSpan 实例,它会公开这些值。

    TimeSpan diff = DateTime.Now - DateTime.Today;
    string formatted = string.Format(
                           CultureInfo.CurrentCulture, 
                           "{0} days, {1} hours, {2} minutes, {3} seconds", 
                           diff.Days, 
                           diff.Hours, 
                           diff.Minutes, 
                           diff.Seconds);
    

    【讨论】:

      【解决方案4】:
          DateTime myDay = DateTime.Now;
          DateTime otherDate = DateTime.Now.AddYears(1);
          var test = otherDate.Subtract(myDay);
          Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" +  test.Minutes +"Seconds" + test.Seconds);
      

      这里的测试是时间戳类型

      【讨论】:

      • 为了避免混淆,.TotalSeconds 将返回 total 秒数,因此 1 小时时间跨度将返回 3,600 TotalSeconds。 .Seconds 属性将返回 0 秒,因为在 1 小时的时间跨度内没有“剩余”。
      【解决方案5】:

      使用TimeSpan 类,减去日期即可得到。

      您可以使用standardcustom 格式字符串来格式化输出。

      “0天0小时23分18秒”

      可以有类似的东西:

      TimeSpan ts = DateTime.Now - DateTime.Today;
      Console.WriteLine(
         string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts)
      );
      

      IMO,使用 string.Format 更简洁、更容易,而不必转义格式字符串中的单词(如果您只是使用 .ToString,则需要)或手动构建它。

      【讨论】:

        【解决方案6】:

        这样的事情怎么样?

            TimeSpan diff = dateTimeNew - dateTimeOld;
            string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
            Console.WriteLine(output);
        

        【讨论】:

          【解决方案7】:

          使用时间跨度

          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 );
          
          String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds",
              span.Days, span.Hours, span.Minutes, span.Seconds);
          

          【讨论】:

            【解决方案8】:

            您是否尝试过使用

            TimeSpan()
            

            这当然可以做你想做的事

            【讨论】:

              【解决方案9】:

              TimeSpan 是你需要的对象:

              TimeSpan span = (DateTime.Now - DateTime.Now);
              
              String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
                  span.Days, span.Hours, span.Minutes, span.Seconds);
              

              【讨论】:

              • 但这会给我几天、几小时、几分钟和几秒钟吗?
              猜你喜欢
              • 2012-12-03
              • 1970-01-01
              • 1970-01-01
              • 2020-01-25
              • 2014-01-17
              • 2011-07-29
              • 2020-11-25
              • 2022-01-19
              相关资源
              最近更新 更多