【问题标题】:Change the timespan millisecond separator; comma(,) instead of dot(.) [duplicate]更改时间跨度毫秒分隔符;逗号(,)而不是点(。)[重复]
【发布时间】: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


【解决方案1】:

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

使用string.Format 这将是

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

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

【讨论】:

    【解决方案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]。

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2022-01-11
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多