奇怪的TimeSpan.ToString输出

时间:2016-01-15 13:12:57

标签: c# .net timespan

我对TimeSpan.ToString输出中将天数与小时数分开的符号有疑问。

标准TimeSpan格式字符串会生成不同的分隔符号:

  • “c”生成句点(“。”)字符
  • “g”和“G”产生冒号(“:”)字符

示例:

// Constant format
Console.WriteLine(TimeSpan.FromDays(42).ToString("c", CultureInfo.InvariantCulture));
// Output: 42.00:00:00 (period character between days and hours)

// General short format
Console.WriteLine(TimeSpan.FromDays(42).ToString("g", CultureInfo.InvariantCulture));
// Output: 42:0:00:00 (colon character between days and hours)

// General long format
Console.WriteLine(TimeSpan.FromDays(42).ToString("G", CultureInfo.InvariantCulture));
// Output: 42:00:00:00.0000000 (colon character between days and hours)

有人知道它背后的逻辑是什么吗?

但是TimeSpan.Parse成功解析了所有这些字符串。

3 个答案:

答案 0 :(得分:6)

这些字符是硬编码的。

"c" standard format

[-][d.]hh:mm:ss[.fffffff]

"g" standard format

[-][d:]h:mm:ss[.FFFFFFF]

对于"G" Format Specifier

[-]d:hh:mm:ss.fffffff

doc也说;

  

与" g"不同。和" G"格式说明符," c"格式说明符是   不是文化敏感的。 它生成一个字符串表示形式   TimeSpan值是不变的,并且对于之前的所有值都是通用的   .NET Framework 4之前版本的.NET Framework 。 " C"是个   默认TimeSpan格式字符串; TimeSpan.ToString()方法格式   使用" c"的时间间隔值格式字符串。

同样在Custom TimeSpan Format Strings

  

.NET Framework没有及时为分隔符定义语法   间隔。这意味着天数和小时之间的分隔符,   小时和分钟,分钟和秒,以及秒和分数   第二个必须全部被视为格式字符串中的字符文字

在所有.NET Framework版本之间,最重要的原因是一致性。也许这就是为什么他们将这种格式称为常量:)

答案 1 :(得分:2)

MSDN - Standard TimeSpan Format Strings上有更详细的信息。

基本上:

" C"是Constant format:这个说明符不是文化敏感的。格式为 [d'。'] hh':'mm':'ss ['。'fffffff]

" G"是General Short format:这是文化敏感的。格式为 [ - ] [d':'] h':'mm':'ss [.FFFFFFF]

" G"是General Long format:这是文化敏感的。格式为 [ - ] d':'hh':'mm':'ss.fffffff。

答案 2 :(得分:0)

查看MSDN

  

" g" TimeSpan格式说明符返回字符串表示形式   紧凑形式的TimeSpan值,仅包含元素   是必要的。

     

[ - ] [d:1 H:MM:SS [.FFFFFFF]

     

.....................

     

" c" format specifier返回a的字符串表示形式   TimeSpan值的格式如下:

     

[ - ] HH [d]:MM:SS [.fffffff]