How to convert “dd/MM/yyyy” string to DateTime
我正在使用此代码转换DateTime。
1 2 3
| DateTime d2;
bool success = DateTime.TryParse(String.Format("{0:dd/MM/yyyy}", row["Remarks"].ToString().Trim()), out d2);
if (success) row["PublishedOn"] = String.Format("{0:dd/MM/yyyy}", d2); |
但是,当我将23/02/2015或dd转换为大于12时,失败了,因为它总是采用"MM/dd/yyyy"格式。
如何将"dd/MM/yyyy"从字符串转换为DateTime?
- String.Format("{0:dd/MM/yyyy}", row["Remarks"].ToString().Trim())瓦?
- row["Remarks"]的类型是什么?
- 我强烈怀疑您根本不需要格式化和解析。每当你发现自己在做这件事时,你应该质疑自己是否真的需要这样做。
- 这里回答了一个非常类似的问题:http://stackoverflow.com/a/15738613/5287860
您可以使用DateTime.ParseExact/TryParseExact并传递要使用的格式:
1
| var date = DateTime.ParseExact("23/02/2015","dd/MM/yyyy", CultureInfo.InvariantCulture); |
- DateTime.TryParseExact将是一个更为有效的选择。
- @阿尔比里奥不是真的-这两种方法的区别在于它们如何治疗失败。没有什么能使一个或另一个更强大——人们甚至可以说,ParseExact更强大,因为它不会让你忽视失败。
- 完美工作:)
- @我用了一个错误的术语,它应该是"高效的",而不是"健壮的"。如果值不是日期,则引发异常对性能不利。
- @阿尔比里奥,那也是错误的-ParseExact内部称TryParseExact。抛出一个异常对性能并没有坏处,就像保险丝烧断对耗电量没有坏处一样。如果你不想让坏数据存在,那么使用TryParseExact会损害性能并增加风险。
- @撇开Panagiotiskanavos的性能考虑因素不谈,异常并不适用于流控制。声称TryParseExact比ParseExact更危险,因为开发人员必须检查结果是否屈尊,我们作为开发人员的工作就是处理错误条件。(你真的会让一个ArgumentException泄漏到你的方法之外,因为它与方法的参数无关?)顺便说一下,如果你说ParseExact内部调用TryParseExact,那么TryParseExact不能比ParseExact慢。
- @阿尔比里奥-在这种情况下,你可以争辩说一个不正确的日期不是"正常"的流程,所以例外是可以接受的选择。实际上,这取决于您希望如何进行错误检查/处理…如果你的偏好是做检查,那么做,但其他人会做不同的。
你想要的是DateTime.ParseExact或DateTime.TryParseExact。
- 我已经使用了这两种方法,但我的问题是不能解决使用它们的问题。
- 你是怎么使用它们的?
- @zulqarnanjalil如果你想解析文本,这些方法是你必须使用的。如果有错误,请检查您使用的模式。很可能是你传错了模式。或者您实际上试图解析已经是日期值的内容——为什么首先要格式化该值?
- 我使用的是"datetime.parseExact(row["remarks"].toString().trim(),"dd/mm/yyyy",cultureInfo.invariangCulture)"。
- 但是当我使用"datetime.parseExact"(row["remarks"].toString().trim(),"dd/mm/yyyy",cultureInfo.invarialCulture)时,我得到了我的答案。
- @zulqarnainjalil您刚刚发布的代码与问题无关——您尝试提取特定的日期组件,而不是解析。这根本不是你要的。事实上,在这两种情况下解析调用是相同的
- @Panagiotiskanavos typarse正在分析值,但dd不大于12。我认为特里帕瑟假设dd为mm,mm不能大于12。