【问题标题】:C# converting different String formats to date [closed]C#将不同的字符串格式转换为日期[关闭]
【发布时间】:2012-09-21 10:18:25
【问题描述】:

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

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

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

只要是正确可读的日期,用户喜欢的任何内容都可以,任何人都可以帮助我吗?

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

【问题讨论】:

  • 11/12 -> 是 12 月 11 日还是 11 月 12 日?
  • 如果他们输入04/03 会怎样?是在三月还是四月?根据您的 21/0909/21 示例,either 可能是正确的。计算机不擅长猜谜游戏。给用户一个日期选择器,确保你得到用户意图的东西。
  • 只要你需要支持“任何格式”,你就不能这样做,因为你的代码必须读心。如果您可以将其缩小到一组支持的格式,那么就可以完成。你明白“正确的可读日期”是一个相当主观的事情,对吧?另外,其他国家的用户呢?
  • 你最好有一个日期时间选择器:)

标签: c# datetime string-to-datetime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      04/05

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

      【讨论】:

        【解决方案4】:

        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)
        

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

        【讨论】:

        • 如果可以的话....我肯定会选择控件,但设计无法容纳日期选择器....我尝试过使用 datetime.parse 但它不起作用。 ...虽然会尝试使用不变的文化信息.....
        猜你喜欢
        • 2023-03-11
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        • 2021-08-01
        • 1970-01-01
        相关资源
        最近更新 更多