【问题标题】:C# Dealing with time inputC# 处理时间输入
【发布时间】:2018-11-08 10:21:58
【问题描述】:

例如,我希望用户输入时间,输入必须采用 HH:MM 格式,并且输入必须在用户输入中包含冒号,我将如何创建并存储它?

输入将来自 WPF 窗口上的文本框

【问题讨论】:

  • 输入哪里?哪个平台?到目前为止,您有什么尝试,遇到了什么困难?
  • 通常(最简单的选择)我们使用DateTime 类型来存储(Date 或/和Time)这样的东西:if (DateTime.TryParseExact(userInputHere, "HH':'mm", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out DateTime result)) {/* ..valid time in the result.TimeOfDay ... */} else {/* .. invalid time ...*/}
  • 它必须是一个文本框?有一些自定义时间选择器控件,可能会做你想做的事。不过,这些不是默认的 WPF 控件。

标签: c# date time


【解决方案1】:

不是很精确的问题,但请允许我提供一点帮助:

这是一个简单的示例,说明如何解析一个字符串,就像你可以拥有的那样,并将它存储在一个 DateTime 变量中(如果你想稍后以不同的格式显示它,这可能是一个干净的解决方案等等)。

string text = "21:05"; (instead you retrieve the content of your text box obviously)
string format = "HH:mm";
CultureInfo fr = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(text, format, fr);

[编辑] 基于 Dmitry 评论:

string text = "21:05";
string format = "HH:mm";
CultureInfo invariant = System.Globalization.CultureInfo.InvariantCulture;
DateTime dt;
if (DateTime.TryParseExact(text, format, invariant, DateTimeStyles.None, out dt))
{
// do your stuff
}
else
{
// handle the fact you cannot parse the datetime
}

请注意,根据您的情况,文化背景可能非常重要。如果您想避免用户输入错误,您应该考虑在用户输入时对框内容进行验证。这是一种迫使他符合您期望的格式的方法。

例如看这里:Implement Validation for WPF TextBoxes,但您应该能够在 SO 上找到有关如何执行此操作的其他示例,或者只是谷歌它。

【讨论】:

  • 我宁愿把它写成DateTime.TryParseExact(请注意Try):当使用用户输入时,我们应该准备好任意字符串(例如45:93bla-bla-bla
  • 我把 CultureInfo.InvariantCulture 展示了一些可能性,我会让 Callum 检查他真正需要什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多