C#将不同的String格式转换为日期

时间:2012-09-21 10:18:26

标签: c# datetime string-to-datetime

我有一个WPF窗口,其中包含一个文本框,用户可以在其中输入任何他想要的格式的日期,我必须在日期时间变量中解析它,这很简单吗?我尝试了各种格式,其中一些使用datatime.parse,有些则没有,所以我应该怎么做这些字符串?

一些例如格式(年份不是强制性的):

  • 9月21日
  • 9月21日
  • 9月21日
  • 9月21日
  • 9月21日
  • 21/09
  • 21-09
无论用户喜欢什么,只要它是一个正确的可读日期,任何人都可以帮助我吗?

更新:根据评论,我正在修改输入字符串格式....如果用户可以以任何方式输入,但总是一天一个月后跟一年(可选)... ..那可管理吗?

4 个答案:

答案 0 :(得分:3)

这不是一个答案,而是一个想法:

为什么你不使用Datepicker,你自己有很多Job试图将每个可能的日期转换成有效的日期,它看起来也不错。请WPF ToolkitCalender Datepicker Control

答案 1 :(得分:2)

做你正在做的事情是徒劳的。

用户可以插入n个数字方式添加日期。你将如何判断他插入的格式。

查找日历控件,因为日历在任何地方都是相同的,任何用户无论身在何处都会在其中插入正确的日期。在这种情况下,您可以询问日历selecteddate或某种财产。

答案 2 :(得分:2)

这个问题没有一个好的答案,尽我所知。

DateTime.Parse仍然依赖于特定格式的日期。如果你想 - 你可以尝试多个CultureInfos并希望其中一个有效 - 但这只适用于真正让人觉得可以接受的一小部分书面日期。

即使您编写了大量代码来尝试找出常规人员写日期的所有可能方式 - 您仍然存在全球化问题 - 某些日期对于解释有多种方式有效。

  

04/05< - 那是哪一天?

除非这只是为了做到这一点;我认为最好的办法就是提供一个日期选择器控件或类似的东西,以方便用户并获取日期。没错 - 指出你期望的日期格式。

答案 3 :(得分:2)

DateTime.Parse适用于当前CultureInfo,除非您指定其他信息。含义:

21 Sept           // invalid
21st Sept         // invalid
21 September      // acceptable by `en` CultureInfo
21st September    // invalid
21 Sep            // acceptable by `en` CultureInfo
21/09             // invalid by `en` CultureInfo (09/21 is valid)
21-09             // invalid by `en` CultureInfo (09-21 is valid)

但是如果你想要一个很好的方式让用户输入数据,可以考虑使用一个始终捕获有效值的控件,而不是依赖于用户将手动输入你需要的确切信息。