将字符串转换为日期时间,模式为“MM/dd/yyyy hh:mm:ss”
本文关键字:yyyy dd hh mm ss 日期 转换 字符串 时间 模式 MM | 更新日期: 2023-09-27 17:57:44
我有一个包含"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);
谢谢!
由于
您使用 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);
- "/"自定义格式说明符 *
hh
说明符用于01
12
。
使用HH
说明符,供00
23
。(基于24小时制(
我认为你应该在你的DateTime.TryParseExact
方法中使用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
由于您在 IFormatProvider
参数中使用 null
,因此它使用 CurrentCulture
.来自文档;
如果提供程序为 null
CultureInfo
,则对应于 使用当前区域性。
但是/ format specifier
在您的字符串格式中具有">用当前区域性日期分隔符替换我"的特殊含义。
这意味着,如果当前区域性的日期分隔符未/
,则分析操作将失败。这就是为什么在这种情况下你应该使用InvariantCulture
。
这里有另一个答案:TryParseExact 返回 false,尽管我不知道为什么
24 小时制时间格式使用 HH
.所以你的格式应该是
"MM/dd/yyyy HH:mm:ss"