将字符串转换为日期时间,模式为“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);

谢谢!

将字符串转换为日期时间,模式为“MM/dd/yyyy hh:mm:ss”

由于

您使用 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"