字符串无法识别为有效的日期时间(格式化)

4

我正在尝试将Oracle的DateTime字段转换为字符串(TextBox)。但是我一直收到以下错误:

该字符串无法识别为有效的DateTime。

字段中的值为:2013年7月25日下午4:12:18

代码:

DateTime dt = DateTime.ParseExact("MM/dd/yyyy HH:mm:ss tt",dr["category"].ToString().Trim(), CultureInfo.InvariantCulture);
txtFedCat.Text = dt.ToString("dd/M/yyyy");

1
大写字母 HH 应该表示24小时制,我非常确定。 - Simon Whitehead
3个回答

3

试试这个:

DateTime dt = DateTime.ParseExact(dr["category"].ToString().Trim(), "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

ParseExact的第一个参数是日期字符串,第二个参数是格式。你把它们搞反了。

此外,我认为你想使用以下格式说明符:

  • M:月份,从1到12。
  • d:日期,从1到31。
  • h:小时,使用12小时制,从1到12。

Fi fcuesta,感谢您的帮助。我尝试了您的解决方案,但仍然出现相同的错误:“字符串无法识别为有效的 DateTime”。 - Zzz
忽略我之前的评论。在我添加了你的代码后,我的SQL语句出了问题,导致错误发生。你的答案是正确的。谢谢! - Zzz
CultureInfo.InvariantCulture 的含义是什么? - Thomas

1
var dateString = "7/25/2013 4:12:18 PM";
DateTime dt = DateTime.ParseExact(dateString, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
var txtFedCat = dt.ToString("dd/M/yyyy");

0

你可以这样做:

string strDate = DateTime.ParseExact(yourDateTime, "M/d/yyyy h:mm:ss tt", null).ToString();
        if (strDate.Substring(0, 10).Trim().LastIndexOf(" ", System.StringComparison.Ordinal) == 8)
            strDate = strDate.Substring(0, 8).Trim();
        else
            strDate = strDate.Substring(0, 10).Trim();
        DateTime FinalDate = Convert.ToDateTime(strDate);

请详细说明为什么出现了这个问题,以及这段代码的作用是什么。 - Nagama Inamdar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接