我有一个asp.net应用程序,其中我有这三个日期:
now = 08-10-13 15:56:19
cloture1 = 01-10-13 00:00:00
cloture2 = 01-01-50 00:00:00
日期格式为DD-MM-YY HH:MM:SS
。问题是函数DateTime.Compare()
给了我相同的结果,即
DateTime.Compare(now,cloture1) > 0
和DateTime.Compare(now,cloture2) > 0
。
那么这个问题的原因是什么?我该如何解决我的片段?
答案 0 :(得分:6)
问题是你的程序很可能将cloture2解释为1950年,而不是2050年。 因为您没有发布设置cloture2的代码,所以我无法提供具体的解决方案,但我能提供的最好的是您在代码中明确使用01-10-2050。
答案 1 :(得分:1)
如果now
晚于cloture1
,则返回的值将为1(或大于零)。
您提供的代码以及示例日期似乎在参考DateTime.Compare
方法的MSDN文章时工作正常。
请查看以下链接,了解有关DateTime.Compare
方法的更多信息:
http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx
如果您认为自己的代码仍然不正确,请详细说明您的问题。
答案 2 :(得分:1)
来自The "yy" Custom Format Specifier
在解析操作中,使用“yy”解析的两位数年份 自定义格式说明符基于 格式提供程序当前的
Calendar.TwoDigitYearMax
属性 日历。在解析操作中,使用“yy”解析的两位数年份 自定义格式说明符基于 格式提供程序当前的Calendar.TwoDigitYearMax属性 日历。以下示例解析a的字符串表示形式 使用默认公历日历具有两位数年份的日期 美国文化。
来自GregorianCalendar.TwoDigitYearMax
此属性允许将2位数年份正确翻译为a 4位数年份。例如,如果此属性设置为2029,则 100年的范围是从1930年到2029年。因此,2位数值为30 被解释为1930年,而2位数值29被解释为 2029。强>
您的应用程序应将此值设置为99以指示该2位数 几年是字面上的。例如,如果设置了此属性 从99开始,100年范围从0开始(大多数情况下不是有效值) 日历)到99.因此,2位数值30被解释为 30。
即使您反编译GregorianCalendar.TwoDigitYearMax
属性,也可以看到自己;
public override int TwoDigitYearMax
{
get
{
if (this.twoDigitYearMax == -1)
this.twoDigitYearMax = Calendar.GetSystemTwoDigitYearSetting(this.ID, 2029);
return this.twoDigitYearMax;
}
Boluc's answer
完全正确。我想指出你的格式部分。
您无法使用YYYY
格式格式化两位数年份。您需要使用允许两位数格式化的yy
格式。
DateTime dt = DateTime.ParseExact("01-01-50 00:00:00", "dd-MM-yy HH:mm:ss", CultureInfo.InvariantCulture);
打印
01.01.1950 00:00:00
这里有 DEMO
。