奇怪的DateTime.ToString行为

时间:2010-08-23 13:02:47

标签: .net datetime-format

我在函数中有以下代码行:

String value = endDate.Value.ToString(dateFormatStr);
//endDate is a DateTime? object (returned from a LINQ to SQL query).

在特定情况下,我遇到奇怪的行为,endDate的值是{10/2/2010 12:00:00 AM}。这是我的结果:

dateFormatStr =“d”=> value =“10/2/2010”(我希望“2”)
dateFormatStr =“M”=> value =“10月2日”(我希望“10”)

5 个答案:

答案 0 :(得分:3)

您的结果与microsoft specification

一致

使用相对DateTime properties以获取日,月和年

**** ****已编辑

检查此代码以查看“d”字符如何根据其单独或模式字符串的一部分更改其行为

DateTime time = DateTime.Now;

// 'd' is part of a pattern expression: "d "
MessageBox.Show(time.ToString("d "));
// result: "24 "

// 'd' defines a specific pattern: "short date"
MessageBox.Show(time.ToString("d"));
//result : "24/08/2010"

答案 1 :(得分:2)

当使用与标准格式匹配的单个字符自定义格式时,需要在格式前放置“%”。例如:

endDate.Value.ToString("%d");

请参阅http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#UsingSingleSpecifiers

答案 2 :(得分:1)

查看this site

这根本不是不规则的,事实上你使用单字符标准格式(here)作为日期。

如果您希望以您期望的方式分割格式,请使用ddMM,或者(如果这是您需要做的)而不是取整数值来自DateTime对象。

即:

endDate.Value.Day
endDate.Value.Month

答案 3 :(得分:0)

我认为你的格式字符串错了。试试“dd”和“MM”。

答案 4 :(得分:0)

某些模式有某种短名称 - 单个字符名称,与完整模式中使用的相同,但不幸的是有不同的含义。你刚刚发现了。

这是另一个有用的site