使用模式将字符串转换为DateTime" MM / dd / yyyy hh:mm:ss"

时间:2014-04-09 11:33:25

标签: c# date datetime

我有一个包含"02/27/2014 23:00:28"的字符串变量 当我使用以下代码将其转换为Datetime类型时,转换失败(测试返回false并且parsedDate包含"01/01/0001 00:00:00"

代码:

string date = "02/27/2014 23:00:28"
string pattern = "MM/dd/yyyy hh:mm:ss";
DateTime parsedDate;
bool parsedSuccessfully = DateTime.TryParseExact(date, pattern, null, DateTimeStyles.None, out parsedDate);

谢谢!

3 个答案:

答案 0 :(得分:5)

由于您使用的是24小时格式,因此需要使用大写HH

MM/dd/yyyy HH:mm:ss

您还需要使用CultureInfo.InvariantCulture代替null,以确保/将用作日期分隔符。否则它将被您的文化实际日期分隔符替换。 *

bool test = DateTime.TryParseExact(date, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);

答案 1 :(得分:3)

hh specifier适用于0112

使用0023的{​​{3}}。 ( 24小时制

我认为您应该在HH specifier方法中使用date代替test

string date = "02/27/2014 23:00:28";
string pattern = "MM/dd/yyyy HH:mm:ss";
DateTime parsedDate;
bool test= DateTime.TryParseExact(date, pattern,
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.None, out parsedDate);
Console.WriteLine(test); // True

由于您在DateTime.TryParseExact参数中使用null,因此它使用IFormatProvider。来自CurrentCulture;

  

如果provider为null,则对应于CultureInfo对象   使用当前的文化。

documentation具有特殊含义" 将我替换为当前的文化日期分隔符"用你的字符串格式。

这意味着,如果您当前的文化日期分隔符不是/,则您的解析操作将失败。这就是为什么你应该在这种情况下使用InvariantCulture的原因。

这是另一个答案:/ format specifier

答案 2 :(得分:2)

24小时时间格式使用HH。所以你的格式应该是

"MM/dd/yyyy HH:mm:ss"