Форматирование даты в C # дает неверный результат - PullRequest
3 голосов
/ 28 февраля 2012

Я пытаюсь отформатировать DateTime в функции C #, но не могу заставить его работать.

Формат, который я пытаюсь получить, выглядит следующим образом:

"28/02/2012"

Я пробовал разные способы форматирования DateTime, например:

string formattedDate = DateTime.Today.ToString("dd/MM/yyyy");

string formattedDate = String.Format("{0:dd/MM/yyyy}", DateTime.Today);

Оба эти примера дают мне такой результат:

"28.02.2012"

Я форматировал DateTimes много раз, прежде чем использовать два способа, показанных выше, но я не могу понять, почему я получаю "." вместо "/".

Есть какая-то конфигурация, которую нужно настроить или что-то в этом роде?

Ответы [ 3 ]

10 голосов
/ 28 февраля 2012

Фог дал правильную причину, но я бы предложил неправильный обходной путь. Если вы всегда хотите отформатировать дату / время, как если бы вы были в определенной культуре (вероятно, инвариантная культура ), тогда вы можете сделать это:

string formattedDate = DateTime.Today.ToString("dd/MM/yyyy", 
                                               CultureInfo.InvariantCulture);

Я считаю, что это чище, чем заставлять некоторые части формата в неизменную форму, оставляя другие (числа) на уровне культуры. Например, рассмотрим это:

using System;
using System.Globalization;
using System.Threading;

class Test
{
    static void Main()
    {
        CultureInfo ci = new CultureInfo("ar-SA");
        Thread.CurrentThread.CurrentCulture = ci;
        string formattedDate = DateTime.Today.ToString("dd/MM/yyyy");
        Console.WriteLine(formattedDate);
    }
}

Сегодня печатается «06/04/1433» - что подходит для исламского календаря, но, вероятно, не , что вы ожидали.

6 голосов
/ 28 февраля 2012

Символ / в строке формата даты и времени является местозаполнителем для специфического для культуры разделителя даты. Чтобы явно указать символ /, его необходимо экранировать: "dd\\/MM\\/yyyy"или @"dd\/MM\/yyyy"

Для получения дополнительной информации см. на странице MSDN «Пользовательские строки формата даты и времени»

0 голосов
/ 29 февраля 2012

Я сделал это так:

string formattedDate = (String.Format("{0:dd.MM.yyyy}", DateTime.Today)).Replace(".", @"/");
...