为什么String.Format将正斜杠转换为减号?

时间:2011-08-09 16:09:50

标签: c# string-formatting

为什么String.Format("/")会转换为“ - ”?

4 个答案:

答案 0 :(得分:23)

我怀疑您在/占位符中使用了{0}符号。它是在给定文化中用作日期时间分隔符的保留符号。你可以逃避它,就像这样:

string date = string.Format("{0:dd\\/MM\\/yyyy}", DateTime.Now);

答案 1 :(得分:13)

根据Custom Date and Time Format Strings/指的是文化的日期分隔符。所以你需要逃避它。您可以根据Darin的答案使用反斜杠,也可以用单引号引用它。例如:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        DateTime date = DateTime.Now;

        CultureInfo da = new CultureInfo("da");
        // Prints 09-08-2011
        Console.WriteLine(string.Format(da, "{0:dd/MM/yyyy}", date));
        // Prints 09/08/2011
        Console.WriteLine(string.Format(da, "{0:dd'/'MM'/'yyyy}", date));
        // Prints 09/08/2011
        Console.WriteLine(string.Format(da, "{0:dd\\/MM\\/yyyy}", date));
    }
}

答案 2 :(得分:6)

我尝试了所有可能的文化:

foreach (CultureInfo info in CultureInfo.GetCultures(CultureTypes.AllCultures)) {
  Console.Write(String.Format(info, "/"));
}

输出:

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////

所以,这不会发生在任何地方。

答案 3 :(得分:1)

您文化中的日期分隔符似乎是“ - ”而不是“/”。请参阅msdn和此article

编辑:

您是否检查了自己的区域和语言设置,以确保没有选择使用“ - ”的选项。

enter image description here