【发布时间】:2018-09-03 13:48:19
【问题描述】:
我想在本地文化中输出一个时间跨度,以便在 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# 将使用给定的文化?
【问题讨论】:
-
你试过
t.ToString("G",cul)吗?和“de-DE”?见docs.microsoft.com/en-us/dotnet/api/… -
@DavidG: 那是关于
DateTime.ToString,这是关于TimeSpan.ToString -
@Fildor 感谢上帝,我以为我会和你和蒂姆一起循环。那我就锤吧……
-
@DavidG:也许你是对的。但不同的是,其他问题需要时分秒魔药文化感知并且没有毫秒。他甚至使用了
g(在此处有效),但这不适用于 h,m,s 分隔符。另一个问题的标题太笼统了 -
@DavidG 恐怕你们俩都是对的:它是关于 TimeSpan 的,但对这个来说并不是真正的骗局。
标签: c# localization cultureinfo timespan .net-4.6