日期时间自定义格式不符合预期

本文关键字:不符合 格式 时间 自定义 日期 | 更新日期: 2023-09-27 18:10:34

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

new DateTime(2011,10,5).ToString("dd");

返回:"05"

:

new DateTime(2011,10,5).ToString("d MM");

返回"5 10"

它们都是我所期望的,但是:

new DateTime(2011,10,5).ToString("d");

返回:"05/10/2011"

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

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

日期时间自定义格式不符合预期

试着阅读这里的标准日期和时间格式字符串"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));

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

正如xanatos所说,它正在治疗";作为标准日期和时间格式字符串。

如果您想要一个只有"d"的自定义日期和时间格式字符串,您需要有效地转义它说"不要将其视为标准模式!"

new DateTime(2011, 10, 5).ToString("%d");

这里的%是从标准到自定义的转义部分。

自定义日期和时间格式字符串文档中的"使用单个自定义格式说明符"部分:

自定义日期和时间格式字符串由两个或多个字符组成。日期和时间格式化方法将任何单字符字符串解释为标准日期和时间格式字符串。如果它们不能将该字符识别为有效的格式说明符,则抛出FormatException。例如,仅由说明符"h"组成的格式字符串被解释为标准日期和时间格式字符串。然而,在这种特殊情况下,会抛出异常,因为没有"h"标准日期和时间格式说明符。

使用任何自定义日期和时间格式说明符作为格式字符串中的唯一说明符(即使用"d"、"f"、"f"、"h"、"h"、"K"、" "、"t"、"y"、"z"、"; "或"/"自定义格式说明符本身),在说明符之前或之后包含一个空格,或者在单个自定义日期和时间说明符之前包含一个百分比("%")格式说明符。

例如:"%h"被解释为自定义日期和时间格式字符串,该字符串显示由当前日期和时间值表示的小时。你也可以使用"h"或者"h "格式字符串,尽管它在结果字符串中包含一个空格和小时。