我对TimeSpan.ToString
输出中将天数与小时数分开的符号有疑问。
标准TimeSpan
格式字符串会生成不同的分隔符号:
示例:
// 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
成功解析了所有这些字符串。
答案 0 :(得分:6)
这些字符是硬编码的。
[-][d.]hh:mm:ss[.fffffff]
[-][d:]h:mm:ss[.FFFFFFF]
[-]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]