【问题标题】:Zero-Padding TimeSpan.ToString(String)零填充 TimeSpan.ToString(String)
【发布时间】:2014-10-14 21:55:21
【问题描述】:

我想从 TimeSpan 对象创建一个字符串,其格式为:“hhhh:mm:ss.ff”。

当我使用以下内容时,我得到一个 FormatException ...

private const string MAX_TIME_ALLOWED_FORMAT = @"hhhh\:mm\:ss.ff";

String myDurationSring = TimeSpan.FromSeconds(myDurationInSeconds).ToString(MAX_TIME_ALLOWED_FORMAT) : string.Empty;

我的格式字符串是否需要一些工作或有更好的方法来做到这一点?

【问题讨论】:

  • D Stanley 的答案是我想要的,但导致异常的是“。”在格式字符串中 - 它之前还需要一个“\”。
  • @TheEvilPenguin 即使修复它也会导致异常,因为它不是有效的格式字符串。
  • @DStanley 啊,我忘了我在测试时还删除了前两个 'h'。

标签: c# formatting timespan


【解决方案1】:

TimeSpan.ToString 不支持显示总小时数的custom format string - 它只能显示小时部分,其最大值为 23。

我会使用一个格式字符串,它采用 TimeSpan 的各个组件:

String myDurationSring =
    string.Format("{0:0000}:{1:00}:{2:00}.{3:00}",
                  (int)(ts.TotalHours), 
                  ts.Minutes, 
                  ts.Seconds, 
                  ts.Milliseconds/10.0);

【讨论】:

    【解决方案2】:

    我认为最简单和最干净的方法是插值:

    var myDurationSring = $"{ts.Hours:0000}:{ts.Minutes:00}:{ts:Seconds:00}.{ts.Milliseconds/10.0}";
    

    【讨论】:

      【解决方案3】:

      试试:

      "hhhh:mm:ss.ff"
      

      作为格式字符串。我假设您正在尝试逃避冒号。你不需要。如果您需要输出中的冒号,请尝试:

      "hhhh\\:mm\\:ss.ff"
      

      【讨论】:

      • TimeSpan 要求将分隔符作为字符串文字包含在内,因此需要转义字符。
      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2011-12-31
      • 2013-07-06
      相关资源
      最近更新 更多