【问题标题】:Subtract TimeSpan bigger than 24H减去大于 24H 的 TimeSpan
【发布时间】:2014-11-05 16:42:15
【问题描述】:

我需要比较两个大于 24 小时的 TimeSpan 值。 为此,我使用以下代码

string startTime = textBox1.Text;
string endTime = textBox21.Text;
TimeSpan startTimet = new TimeSpan(int.Parse(startTime.Split(':')[0]),    // hours
                      int.Parse(startTime.Split(':')[1]),    // minutes
                      0);
TimeSpan endTimet = new TimeSpan(int.Parse(endTime.Split(':')[0]),    // hours
                    int.Parse(endTime.Split(':')[1]),    // minutes
                    0);
TimeSpan duration = endTimet.Subtract(startTimet);
label29.Text = duration.ToString();

如果值不大于 24H,一切正常,但如果我的值大于 24h,TimeSpan 将显示为 DD.HH.MM.SS。

例如:

结束时间 = 32:15

开始时间 = 02:00

持续时间 = 1.06:15:00

而我真正需要的是像 HH:MM 这样的普通格式,假设小时数大于 24,得到预期的 30:15

有人可以帮我吗? 问候

【问题讨论】:

  • 复制链接相似,但与询问的不完全相同。
  • @MattJohnson:你看到了什么不同? Jon 接受的答案正是这里的 OP 所要求的。
  • @dotNET - 技术类似,是的。但是请求的格式不同。这个问题还涉及解析和减法,尽管有人可能会认为这些与问题无关。它真的可以去任何一种方式,但在我看来它不是一个精确重复。

标签: c# winforms visual-studio timespan


【解决方案1】:

也许有这个解决方法:

TimeSpan duration = TimeSpan.FromHours(30);
string result = string.Format("{0}:{1}"
    , duration.TotalHours
    , duration.Minutes);  // 30:00

【讨论】:

    【解决方案2】:

    Noda Time 来救援!

    string s1 = "123:45";
    string s2 = "234:56";
    
    DurationPattern p = DurationPattern.CreateWithInvariantCulture("H:mm");
    Duration d1 = p.Parse(s1).Value;
    Duration d2 = p.Parse(s2).Value;
    
    Duration diff = d2 - d1;
    
    string result = p.Format(diff);  // "111:11"
    

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多