2012-02-28 76 views
3

我想在C#函数中格式化日期时间,但我无法让它工作。C#格式化DateTime给我错误的结果

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

"28/02/2012" 

我已经尝试了不同的方法来格式化日期时间,例如:

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

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

这两个例子给我这个结果:

"28.02.2012" 

我已经使用上面显示的两种方法之前多次格式化DateTimes,但我ca不是真的明白我为什么会得到“。”代替 ”/”。

是否有一些配置需要设置或什么?

回答

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

今天,打印“1433年6月4日” - 这是适合于伊斯兰教历,但可能不是你所期望的。

+0

谢谢!这个技巧=) – bale3 2012-02-28 20:01:41

+0

我很确定有些开发人员使用Jon Skeet开玩笑,其中一个Chuck Norris是合适的。 – 2012-02-28 20:02:04

+0

+1 Jon当然是对的。我的答案背离了VB 6的历史;不变的文化对.NET来说更具惯用性。 – phoog 2012-02-28 20:03:39

6

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

欲了解更多信息,请参阅the MSDN page "Custom Date and Time Format Strings"

+1

,逃离转义字符:) – 2012-02-28 19:58:56

+0

@当然C.Evenhuis是;感谢您指出了这一点。 – phoog 2012-02-28 20:00:13

0

我做了这样的:

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