【问题标题】:Get date difference for differences > 24 hours [duplicate]获取差异> 24小时的日期差异[重复]
【发布时间】:2016-08-26 10:27:12
【问题描述】:

我正在我的网络应用程序上使用以下代码以hh:mm:ss 格式显示两个日期之间的差异:

double durationSeconds = (EndDateTime - StartDateTime).TotalSeconds;
TimeSpan seconds = TimeSpan.FromSeconds(durationSeconds);
string duration = seconds.ToString(@"hh\:mm\:ss\:fff");
litDuration.Text = duration;

这仅适用于少于 24 小时的差异,但我希望小时计数器显示得更高。例如使用以下日期时间

StartDateTime = 2016-08-25 15:00:00
EndDateTime = 2016-08-27 15:28:30

hh:mm:ss 格式的差异应该是48:28:30,但当前显示的是00:28:30。

非常感谢任何帮助

【问题讨论】:

  • 看看这篇文章是否对你有帮助stackoverflow.com/questions/3505230/…
  • seconds.ToString(@"hh\:mm\:ss\:fff"); 将使用seconds.Hours 来格式化输出。而您想使用seconds.TotalHours。您需要为此编写自己的格式化函数(请参阅上面的链接以获取示例)
  • 你永远不会得到一个 TimeSpan 来显示任何高于 23 的数字。查看 Days 属性并在转换为字符串时添加 +24 小时

标签: c# .net datetime


【解决方案1】:

这样做怎么样?

string duration =
    String.Format(
        @"{0}:{1:mm\:ss\:fff}",
        seconds.Days * 24.0 + seconds.Hours,
        seconds);

【讨论】:

    【解决方案2】:

    我想出了一个快速的解决方案。但这不是最好的。我仅使用您的数据对其进行了测试。所以它需要一些改进。

     var startDateTime = Convert.ToDateTime("2016-08-25 15:00:00");
     var endDateTime = Convert.ToDateTime("2016-08-27 15:28:30");
     String.Format("{0}:{1}:{2}", 
                Convert.ToInt32(Math.Round((endDateTime - startDateTime).TotalHours -0.5, MidpointRounding.ToEven) ),
                (endDateTime - startDateTime).Minutes,
                (endDateTime - startDateTime).Seconds);
    

    【讨论】:

      【解决方案3】:

      这样的?

      var StartDateTime = new DateTime(2016, 8, 25, 15, 0, 0);
      var EndDateTime = new DateTime(2016, 8, 27, 15, 28, 30);
      
      var durationTimeSpan = EndDateTime.Subtract(StartDateTime);
      var duration =
          (int)durationTimeSpan.TotalHours + ":" +
          durationTimeSpan.Minutes.ToString("00") + ":" +
          durationTimeSpan.Seconds.ToString("00");
      

      “持续时间”字符串将根据需要为“48:28:30”。

      【讨论】:

        【解决方案4】:

        或者以更时尚的方式:

        string duration = String.Format($"{(int)seconds.TotalHours}:{seconds.Minutes}:{seconds.Seconds}");
        

        *编辑:而且更具可读性

        【讨论】:

          【解决方案5】:

          很简单:

          DateTime startDateTime;
          DateTime.TryParse("2016-08-25 15:00:00", out startDateTime);
          DateTime endDateTime; 
          DateTime.TryParse("2016-08-27 15:28:30", out endDateTime);
          TimeSpan span = (endDateTime - startDateTime);
          
          var durationString = string.Format("{0}:{1}:{2}", (int)span.TotalHours, span.Minutes, span.Seconds);    
          

          【讨论】:

            猜你喜欢
            • 2013-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-31
            • 2015-03-23
            • 1970-01-01
            相关资源
            最近更新 更多