C#格式化DateTime给我错误的结果

时间:2012-02-28 19:55:47

标签: c# string datetime format

我试图在C#函数中格式化DateTime,但我无法让它工作。

我试图获得的格式是这样的:

"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 个答案:

答案 0 :(得分:10)

phoog给出了正确的理由,但我建议错误的解决方法。如果您总是希望将日期/时间格式化为特定文化(可能是不变文化),那么您可以这样做:

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” - 适用于伊斯兰日历,但可能不是你所期望的。

答案 1 :(得分:6)

日期时间格式字符串中的/字符是文化特定日期分隔符的占位符。要明确指定/字符,您需要转义它:"dd\\/MM\\/yyyy"@"dd\/MM\/yyyy"

有关详细信息,请参阅the MSDN page "Custom Date and Time Format Strings"

答案 2 :(得分:0)

我是这样做的:

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