2

我有一个 WPF 窗口,其中包含一个文本框,用户可以在其中输入他想要的任何格式的日期,我必须在 datetime 变量中解析它,够简单吗?我尝试了各种格式,其中一些与 datatime.parse 一起使用,有些则不使用,那么我应该如何处理这些字符串?

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

  • 9月21日
  • 9 月 21 日
  • 9 月 21 日
  • 9 月 21 日
  • 9月21日
  • 21/09
  • 21-09

只要它是一个适当的可读日期,任何吸引用户的东西,任何人都可以帮助我吗?

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

4

4 回答 4

3

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

为什么不使用 Datepicker 会省去很多工作来尝试将每个可能的日期转换为有效的日期,而且它看起来也不错。看看WPF ToolkitCalender Datepicker Control

于 2012-09-21T10:24:46.003 回答
2

DateTime.ParseCultureInfo除非您指定其他信息,否则适用于当前。意义:

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)

但是,如果您想要一种让用户输入数据的好方法,请考虑使用始终捕获有效值的控件,而不是依赖用户手动输入您需要的确切信息。

于 2012-09-21T10:46:00.037 回答
2

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

用户可以插入n多种添加日期的方式。你将如何判断他插入了什么格式。

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

于 2012-09-21T10:27:57.073 回答
2

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

DateTime.Parse仍然依赖于特定格式的日期。如果您愿意 - 您可以尝试多个 CultureInfos 并希望其中一个有效 - 但这仅适用于真实人们认为可以接受的一小部分书面日期。

即使您编写了大量代码来尝试找出普通人编写日期的所有可能方式 - 您仍然会遇到全球化问题 - 某些日期对于以不止一种方式进行解释是有效的。

04/05 <-- 那是什么日子?

除非这只是为了这样做;我认为最好的办法是简单地提供一个日期选择器控件或类似的东西,使用户更容易并为您提供 date 。除此之外 - 指出您期望的日期格式。

于 2012-09-21T10:28:31.193 回答