更改时间跨度分隔符;逗号(,)代替点(。)

时间:2018-09-03 13:48:20

标签: c# localization cultureinfo timespan .net-4.6

我想输出当地文化中的时间跨度,以在Excel中将其导入为csv。 时间跨度包含毫秒。

在英语文化中,这意味着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#使用给定的Culture?

2 个答案:

答案 0 :(得分:5)

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

使用string.Format

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

有关格式化时间跨度can be found in the docs

的更多信息

答案 1 :(得分:2)

这对我有用。 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]。