【问题标题】:how to achieve timespan to string conversion?如何实现时间跨度到字符串的转换?
【发布时间】:2010-03-05 06:12:41
【问题描述】:

我尝试搜索here,但对我没有多大帮助..
我想 convert 将 time_span 转换为字符串,我不想以天为单位返回时间跨度 .. 但只返回 HH:mm:ss。如何做到这一点?

我的示例代码在这里:

              String time_span_par = "06:12:40";
              String time_str = "18:13:59";
              TimeSpan time_span_var = TimeSpan.Parse(time_span_par);
              TimeSpan time_span = TimeSpan.Parse(time_str);

              time_span = time_span.Add(time_span_var);
              string temp = time_span.ToString("HH:mm:ss");

【问题讨论】:

  • 这是否意味着您想将 18 小时增加到 6 小时?那不是改天了吗?
  • 是的,但我不希望这一天.. 0 小时足以显示..

标签: c# string timespan datetime-format


【解决方案1】:

尝试使用

DateTime d = new DateTime(time_span.Ticks);
string time = d.ToString("HH:mm:ss");

【讨论】:

  • 你好@astander,你的回答也可以接受..但我个人喜欢单行代码..
  • @infant 程序员,这个也可以单行,你可以把两个表达式合并成一行:string time = new DateTime(time_span.Ticks).ToString("HH:mm:ss");
  • @cms,好的..然后接受。我只是避免声明另一个变量。
  • 如果使用框架 4,您现在可以直接在 TimeSpan 实例上使用文字字符串,从而更容易阅读代码:time_span.ToString(@"hh\:mm\:ss")
【解决方案2】:

这应该可行:

string temp = string.Format("{0}:{1}:{2}",
    time_span.Hours.ToString(), time_span.Minutes.ToString(),
    time_span.Seconds.ToString());

根据评论,如果您想要两位数,您可以这样做:

string temp = string.Format("{0}:{1}:{2}",
    time_span.Hours.ToString("00"), time_span.Minutes.ToString("00"),
    time_span.Seconds.ToString("00"));

已编辑:根据吉米的评论,

string temp = string.Format("{0:00}:{1:00}:{2:00}",time_span.Hours, time_span.Minutes, time_span.Seconds);

【讨论】:

  • 这不会为您提供
  • string.Format("{0:00}:{1:00}:{2:00}",time_span.Hours, time_span.Minutes, time_span.Seconds);
【解决方案3】:

试试这个:

    time_span = time_span.Add(time_span_var);
    string temp = time_span.ToString();
    temp = string.Format("{0}:{1}:{2}", time_span.TotalHours, time_span.TotalMinutes, time_span.TotalSeconds);

编辑 在我阅读了您对您的问题的评论后,即您需要在新的日子显示零小时,我的回答会给您总小时、分钟和秒,而不是您想要的。

(+1) 凯尔西 ;)

【讨论】:

  • 您不能使用TotalHoursTotalMinutes 等,因为它们是独立计算的,包含所有值。也只是在时间跨度输出上执行 ToString():1.00:26:3 我的版本输出:00:26:39
  • 谢谢凯尔西 ;) 你的回答真的是她的问题的最佳答案。在我的页面更新您的评论之前,我在上面编辑了我的答案。无论如何,谢谢。
【解决方案4】:

我实现的代码是:

          string temp = DateTime.Today.Add(time_span).ToString("HH:mm:ss");

原帖由Marc Gravell,

【讨论】:

  • 这不是我自己的答案..所以我不想功劳,而且我想重视其他人的帮助态度和努力.. :-)
  • 虽然我讨厌演员的成本(为了获得我的时间跨度,我实际上已经不得不演员了)这是一段更优雅的代码
【解决方案5】:

现在有一种更简单的方法来执行此操作(尽管仅使用框架 4),您只需要按字面意思使用字符串,并且可以直接在 TimeSpan 实例上执行此操作。

time_span.ToString(@"hh\:mm\:ss")

这将输出

00:26:39

现在对遇到这个问题的人(比如我自己)很有帮助。

干杯:)

【讨论】:

    【解决方案6】:

    只需将刻度的值转换为 DateTime,然后使用它的 ToString()

    var date1 = DateTime.Now;
    var date2 = DateTime.Now.AddSeconds( -1000 );
    var diff = date1 - date2;
    var temp = new DateTime( diff.Ticks ).ToString( "HH:mm:ss" )
    

    【讨论】:

      【解决方案7】:
      String time_span_par = "06:12:40";
      String time_str = "18:13:59";
      TimeSpan time_span_var = TimeSpan.Parse(time_span_par);
      TimeSpan time_span = TimeSpan.Parse(time_str);
      
      TimeSpan finalTime =  (time_span_var + time_span);
      Console.WriteLine(finalTime);
      Console.WriteLine(finalTime - TimeSpan.FromHours(finalTime.Days * 24));
      

      【讨论】:

        【解决方案8】:

        如果天数无关紧要,那么您就有了解决方案,但是我遇到了这个答案,以搜索总共给出小时数的转换,因此需要将 36 小时显示为 36:00:00。使用上面的一些提示是我想出的:

        SomeLabel.Text = Math.Floor(ts.TotalHours).ToString() + ":" + ts.Minutes.ToString("D2") + ":" + ts.Seconds.ToString("D2");
        

        总小时数总是向下舍入,分钟和秒被填充为 2 位数字 (00 - 09)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          相关资源
          最近更新 更多