Почему String.Format конвертирует косую черту в знак минуса?

Почему String.Format("/") преобразуется в "-"?

Ответы

Ответ 1

Я подозреваю, что вы используете символ / внутри заставки {0}. Это зарезервированный символ, используемый в качестве разделителя даты и времени в данной культуре. Вы можете избежать этого, например:

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

Ответ 2

По Пользовательские строки формата даты и времени, / относится к разделителю дат культуры. Поэтому вам нужно избежать этого. Вы можете использовать обратную косую черту в соответствии с ответом Дарина, или вы можете процитировать ее в одинарных кавычках. Например:

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));
    }
}

Ответ 3

Я пробовал это со всеми возможными культурами:

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

Вывод:

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

Итак, этого не происходит нигде.

Ответ 4

Похоже, что в вашей культуре ваш селектор даты "-" вместо "/". см. msdn и статья

Edit:

Вы проверили настройки своего региона и языка, чтобы убедиться, что у вас нет выбора, который использует "-".

enter image description here