0

我有接受像这样的时间格式的文本框 12:40 PM 但想将其转换为像这样的时间格式 12:40:00 基本上没有 PM 或 AM。这是我到目前为止所拥有的:

string StartTime = ((TextBox)TestDV.FindControl("txtBST")).Text.ToString();

谢谢

4

3 回答 3

8

一种选择是解析为 aDateTime然后返回一个字符串:

string s = "12:40 PM";

DateTime dt = DateTime.Parse(s);

string s2 = dt.ToString("HH:mm:ss");  // 12:40:00

但是请注意,大多数操作使用 aDateTime与 a 的字符串表示相比效果更好DateTime

于 2013-04-30T18:10:02.650 回答
5

首先,您应该将其解析为 a DateTime,然后对其进行格式化。听起来您的输入格式类似于hh:mm tt,而您的输出格式为HH:mm:ss. 所以,你有:

string input = "12:40 PM"
DateTime dateTime = DateTime.ParseExact(input, "hh:mm tt",
                                        CultureInfo.InvariantCulture);
string output = dateTime.ToString("HH:mm:ss", CultureInfo.InvariantCulture);

注意:

  • 如果解析失败,我使用DateTime.ParseExact了 which 会抛出异常;您可能想要使用DateTime.TryParseExact(这取决于您的情况)
  • 我在这里对这两种操作都使用了不变的文化。我不知道这是否适合您的场景。
  • 我用过hh:mm,但您可能想要h:mm……您会期待“1 ​​PM”还是“01 PM”?
  • 您不解析秒,因此该部分将始终为 0... 可以吗?
于 2013-04-30T18:11:05.433 回答
3

由于您将其作为字符串引入,因此这实际上很容易。

string StartTime = ((TextBox)TestDV.FindControl("txtBST")).Text.ToString();
DateTime dt = new DateTime();
try { dt = Convert.ToDateTime(StartTime); } 
catch(FormatException) { dt = Convert.ToDateTime("12:00 AM"); }
StartTime = dt.ToString("HH:mm");

所以你带入你的字符串,并将其转换为日期。如果输入不是有效日期,则默认为 00:00。无论哪种方式,它都会为您提供一个字符串和一个 DateTime 对象,具体取决于您还需要做什么。两者都表示相同的值,但字符串将采用 24 小时格式。

干杯!!

于 2013-04-30T19:07:55.357 回答