2012-10-24 76 views
1

我知道这样的问题在这里吨。请通过一次无法解析日期时间在C#

我有一个string来自具有当前日期的文本框,例如, 10/9/2012,我的课程属性为DateTime?类型。我正在使用Convert.ToDateTime(datetime_string_from_textbox),但它给了我一个FormatException。然后我试着按照Jon Skeet here的建议尝试DateTime.ParseExact(string, format, CultureInfo, DateTimeStyle),但它给了我同样的例外。

还有一件事—我的本地机器日期时间格式是dd-mm-yyyy。当我切换到mm/dd/yyyy格式的代码工作正常。所以基本上,我想知道如何将有效的日期时间字符串解析为DateTime对象,而不考虑区域设置,或任何设置或本地机器上的任何依赖关系。

这可能吗?

更新:代码中使用

employee.JoiningDate = DateTime.ParseExact(string.Format("{0} 00:00:00", JoiningDate.Text.Trim()), "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); 

存在的问题,并要求解决

我的系统日期时间显示24-10-2012(即10月24日),我有10个/ 17/2012年在我的文本框(即,10月17日),因为文本框的日期也是有效的,部署后再次客户端日期时间格式将成为未知,所以,我想要一个通用的方式来解析任何有效的日期时间字符串,无论区域设置。这可能吗?

+1

你用什么格式字符串? – Bridge

+1

你用DateTime.ParseExact指定了什么格式? – AdaTheDev

+0

使用蒙版控制并将输入限制为特定格式。解析日期时使用相同的格式。 – jags

回答

5

这应该工作:

var date = DateTime.ParseExact(str, "M/d/yyyy", CultureInfo.InvariantCulture); 

随着波纹管测试:

enter image description here

+0

如果我的日期是2012年12月24日,那么MM/dd/yyyy会起作用吗? –

+0

是的,它会工作.. MM和M之间的差异仅在一个数字月.. –

0

这完全取决于机器的设置。 DateTime.ParseExact(str, "dd/MM/yyyy", CultureInfo.InvariantCulture);将适用于英国格式,但它会给美国格式的格式例外。所以根据你的机器设置使用格式。

+0

据我所知,“不变文化”只是基于英语,而不是文化或地区特定的。 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx – Silvermind

+0

这是我所经历的。使用美国格式,此代码将工作,并使用英国格式,此代码将无法正常工作。至少它与我同在。 –

+0

我试过这个:'DateTime.ParseExact(“2012年12月24日”,“dd/MM/yyyy”,System.Globalization.CultureInfo.InvariantCulture); \t DateTime.ParseExact(“24-12-2012”,“dd-MM-yyyy”,System.Globalization.CultureInfo.InvariantCulture); \t DateTime.ParseExact(“24.12.2012”,“dd.MM.yyyy”,System.Globalization.CultureInfo.InvariantCulture);'它们都会给出'24-12-2012 0:00:00'所以它的行为如预期, 没有什么不对。我的本地设置是'dd-MM-yyyy'。 – Silvermind

0

请尝试以下,如果它工作

var formatInfo = new DateTimeFormatInfo(); 
formatInfo.ShortDatePattern = "MM/dd/yyyy"; 
DateTime.Parse(date, formatInfo);