【问题标题】:Parsing time without date in a TextBox在文本框中解析没有日期的时间
【发布时间】:2010-09-21 21:16:00
【问题描述】:

我正在开发一个时间表应用程序,我希望用户能够在 TextBoxes 中输入时间,例如:8 a 或 8:00 a 等,就像在 Excel 中一样。

现在,如果您在 TextBox 中输入一个日期,然后使用 DateTime.TryParse,您可以以多种格式输入它(2007 年 1 月 31 日;2007 年 1 月 31 日;2007 年 1 月 31 日) ;2007 年 1 月 31 日;等等),.NET 会计算出来并将其转换为 DateTime。

但是当我在“8 a”或“8:00 a”之类的字符串上使用 DateTime.TryParse 时,它​​无法理解。

我知道我可以使用 ParseExact,但我想知道是否有更灵活的解决方案。我希望 .NET 从“8 a”或“8:00 a”获取 8:00a,并将日期组件保留为默认的 1/1/0001。

【问题讨论】:

  • 是否有令人信服的理由使用文本框,而不是使用 Format=Time 的 System.Windows.Forms.DateTimePicker?
  • 嗯,它是一个 WPF 应用程序,所以使用 WinForms 的东西不是我的首选。
  • 啊,是的,如果您返回到 winforms,您将失去 WPF 的一些不错的功能,但这当然是可能的,而且我相信有一个日期时间控件即将出现.Net 4.

标签: c# wpf vb.net datetime .net-3.5


【解决方案1】:

你总是可以欺骗系统(很容易):

DateTime blah = DateTime.Parse("1/1/0001 " + myTimeString);

我自己也做过类似的事情。

【讨论】:

    【解决方案2】:

    您可以使用验证或验证事件来捕获文本并添加“m”。

    【讨论】:

      【解决方案3】:

      想一想,没关系。我刚刚注意到,如果我使用“am”和“pm”而不是“a”和“p”,它可以正常工作。它假定今天的日期,而不是默认的 1/1/0001,但这对我来说不是问题。

      (不过,任何使“a”和“p”工作的相当简单的解决方案都是受欢迎的。)

      【讨论】:

      • 如果第一个 TryParse 没有通过,您可以将字母 m 添加到用户的输入中。虽然不确定这是个好主意
      • 这是一个非常好的想法,配音。有点俗气:),但我真正需要的是这样的特殊情况。
      【解决方案4】:

      我会重新考虑您的 UI 功能并将其替换为两个组合框或其他形式的时间选择器。

      最终,即使是世界上最好的时间解析器,仍然无法通过白痴用户测试。

      除此之外,Parse.Exact 就是您所需要的。

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 2020-02-05
        • 2018-06-02
        • 1970-01-01
        • 2014-01-29
        • 2021-06-29
        • 2019-01-31
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多