更改时间跨度毫秒分隔符;逗号(,)代替点(。)[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改时间跨度毫秒分隔符;逗号(,)代替点(。)[重复]相关的知识,希望对你有一定的参考价值。

我想在本地文化中输出一个时间跨度,将其作为csv导入Excel中。时间跨度包含毫秒。

与英国文化,这意味着,例如00:00:01.2345678 与德国文化,这应该是00:00:01,2345678(逗号而不是点)

但无论我为CultureInfo对象尝试哪种设置,我都无法让它工作:

TimeSpan t = new TimeSpan(12345678);
var cul = CultureInfo.GetCultureInfo("de");
// cul.DateTimeFormat.FullTimeSpanPositivePattern == "d':'h':'mm':'ss','FFFFFFF";
// (note the comma)

Console.WriteLine(String.Format(cul, "{0}", t));
// expected: "00:00:01,2345678" (with ,)
// actual: "00:00:01.2345678" (with .)

到目前为止,我甚至无法分辨CultureInfo类的哪些属性定义了这个。这是硬编码的吗?

我知道我可以明确地定义输出格式:`String.Format(“{0:hh :mm :ss ,FFFFFFF}”,t)

但有没有办法使用IFormatProvider,所以c#将使用给定的文化?

答案

使用"g"-format specifier,所以t.ToString("g", culture)。默认情况下,使用TimeSpan格式说明符转换"c",这是一种常见的非文化特定格式。

使用string.Format这将是

String.Format(cul, "{0:g}", t)

关于格式化时间跨度can be found in the docs的更多信息

另一答案

这适合我。 Version fiddle

TimeSpan t = new TimeSpan(12345678);
var cul = CultureInfo.GetCultureInfo("de");
Console.WriteLine(t.ToString("g", cul));

article微软表示

“g”:此说明符仅输出所需内容。它是文化敏感的,采用[ - ] [d':'] h':'mm':'ss [.FFFFFFF]的形式。

以上是关于更改时间跨度毫秒分隔符;逗号(,)代替点(。)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

NumericUpDown:接受逗号和点作为小数分隔符

如果是葡萄牙语,如何在 EditText 中用点替换逗号

FreeMarker - 从毫秒中删除逗号

运行时十进制符号更改

用逗号代替点接受双重

用逗号代替点的十进制数(php 和 sql)