我有一个包含"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);
谢谢!
答案 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适用于01
到12
。
使用00
到23
的{{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"