2011-08-26 62 views
7

可能重复:
DateTime.TryParse century control C#日期时间的TryParse - 映射 '99' 至2099年,1999年不

我需要的TryParse一个字符串,如以下内容:“99年1月1日“转换为DateTime对象,并且我使用的是这样的:

DateTime outDate; 
if (DateTime.TryParseExact("01/01/99", "dd/MM/yy", null, System.Globalization.DateTimeStyles.None, out outDate)) 
{ 
    //Do stuff here 
} 

当然,这个日期被解析为01/01/1999,这是不是我想要的 - 我想要它解析为2099.有没有简单的方法来做到这一点?悲伤地修改我分析的数据以包括全年不是一种选择。

+7

我们从Y2K学到什么吗? :( –

+0

IIRC,根据2位数年份确定一个世纪的门槛值,我不确定是否可以通过配置更改门槛值 –

+1

应该是两位数年份总是推断为20yy? –

回答

5

取自this answer,您可以提供ParseExact()的文化对象。嫌疑人TryParseExact()将是相同的:

CultureInfo ci = new CultureInfo(CultureInfo.CurrentCulture.LCID); 
ci.Calendar.TwoDigitYearMax = 2099; 
//Parse the date using our custom culture. 
DateTime dt = DateTime.ParseExact(input, "MMM-yy", ci); 
+0

太棒了,作品一种享受 - 谢谢! – Chris

0

这是一个区域设置。在Windows 7中,您可以在控制面板>时钟,语言和区域>区域和语言中进行编辑。在格式选项卡上,点击高级按钮并查看日期。

我不知道有什么办法来务实地改变这种情况,但是如果你在控制面板中设置它,只要你不改变文化,你的应用程序就会使用它。

这就是说,你真的需要去打败那些用重物提供这些数据的人。我们应该在12年前消除这种类型的Y2K废话。

编辑 - dan04的评论链接也有一些选项。