更改时间跨度毫秒分隔符,使用逗号(,)代替点(.)

4
我想要以本地文化格式输出时间间隔,将其作为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#将使用给定的 Culture?


3
您尝试过使用 t.ToString("G",cul) 吗?还有 "de-DE" 语言环境呢? - Fildor
@Fildor 看一下问题的标题和 MSDN 链接,两者都是关于 TimeSpan 的。Hans 的答案将一个 TimeSpan 转换为 DateTime,然后输出一个字符串作为解决方法。 - DavidG
1
@Fildor 谢天谢地,我以为我和Tim说的不一样,我会继续努力... - DavidG
2
@DavidG:或许你是对的。但另一个问题需要以文化意识为基础,获取小时、分钟和秒信息,而且没有毫秒。他甚至使用了 g(这里适用),但它不能作为时、分、秒的分隔符。另一个问题的标题过于笼统了。 - Tim Schmelter
1
@DavidG 我恐怕你们两个都是对的:它确实与TimeSpan有关,但并不完全是这个问题的重复。 - Fildor
显示剩余7条评论
2个回答

5
使用"g"格式说明符,因此使用t.ToString("g", culture)。默认情况下,TimeSpan会使用"c"格式说明符进行转换,这是一种常见的非特定文化的格式。
使用string.Format,代码如下:
String.Format(cul, "{0:g}", t)

关于格式化时间跨度的更多信息 可以在文档中找到


2
这对我很有用。 版本演示
TimeSpan t = new TimeSpan(12345678);
var cul = CultureInfo.GetCultureInfo("de");
Console.WriteLine(t.ToString("g", cul));

这篇文章是微软发布的:

"g":此格式化字符串仅输出必要的内容。它是与文化相关的,并采用[-][d’:’]h’:’mm’:’ss[.FFFFFFF]格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接