DateTime自定义格式不符合预期

And*_*ndy 2 c# datetime string-formatting

我一直在使用自定义格式显示DateTimes,如下所示:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

例如

new DateTime(2011,10,5).ToString("dd");
Run Code Online (Sandbox Code Playgroud)

返回: "05"

和:

new DateTime(2011,10,5).ToString("d MM");
Run Code Online (Sandbox Code Playgroud)

返回 "5 10"

这两者都是我所期望的,但是:

new DateTime(2011,10,5).ToString("d");
Run Code Online (Sandbox Code Playgroud)

返回: "05/10/2011"

当我希望它返回时: "5"

这在实践中并不重要,因为你会使用:new DateTime(2011,10,5).Day获得一天,但我感兴趣的是为什么自定义格式不能像我预期的那样工作.

xan*_*tos 5

尝试阅读此处标准日期和时间格式字符串 "d" Short date pattern..是的,重复使用d:-) 可能有点愚蠢,幸运的是它是一个极端的案例.

一般情况下CultureInfo.InvariantCulture,除非您完全了解自己在做什么,并且知道您的程序不会在国外销售,否则您应该始终使用,而不是输入/输出给用户的东西.因此,如果您要向用户显示日期,请使用他的文化/当地文化.如果您要向用户询问相同的日期.但是如果您使用日期来命名文件或进行一些内部操作,通常最好使用它CultureInfo.InvariantCulture.

试试这个:

Console.WriteLine(DateTime.Now.ToString("MM", new System.Globalization.CultureInfo("ar-SA")));
Console.WriteLine(DateTime.Now.ToString("yyyy", new System.Globalization.CultureInfo("ar-SA")));

Console.WriteLine(DateTime.Now.ToString("MM", System.Globalization.CultureInfo.InvariantCulture));
Console.WriteLine(DateTime.Now.ToString("yyyy", System.Globalization.CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

告诉我你看到了什么:-)