以下代码应输出2016年11月18日。 第一个消息框输出2016年11月18日 第二个消息框错误地输出 2016年1月18日
第一个if语句中的代码是否正确,或者我是否也应用不同的格式。我正好在测试时注意到这个问题。
DateTime Output;
string Input = "2016/11/18";
if (DateTime.TryParseExact(Input, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out Output))
{
MessageBox.Show(Output.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture));
}
if (DateTime.TryParseExact(Input, "yyyy/mm/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out Output))
{
MessageBox.Show(Output.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture));
}
答案 0 :(得分:5)
mm
specifier分钟。 MM
specifier已有好几个月了。
您在第二个TryParseExact
方法中使用了错误的格式说明符。
由于您未指定yyyy/mm/dd
格式的月份部分,因此默认情况下为1
,即Gregorian calender中的1月。
例如,您的第一个Output
将是;
18/11/2016 00:00:00
这就是为什么
Output.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture)
生成18-Nov-2016
<强>但强>
你的第二个Output
将是;
18/01/2016 00:11:00
这就是为什么
Output.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture)
生成18-Jan-2016
。