从格式为ddMMMyyyy hhmm的字符串解析日期时间(带月份名称)

Pan*_*kaj 5 c# string-parsing

我有点陷入一个问题,我无法解析字符串中的日期和时间,我正在从文本文件中读取.我得到的字符串采用以下格式:

05SEP1998 2400

我试图通过以下代码解析字符串:

string dateTimeStr = "05SEP1998 2400"

var provider = CultureInfo.InvariantCulture;

const string Format = "ddMMMyyyy hhmm";

var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider);
Run Code Online (Sandbox Code Playgroud)

但在解析时,上面的代码抛出FormatException:

String was not recognized as a valid DateTime.

有人可以帮我解决这个问题吗?

Tim*_* S. 1

hh是12小时,HH是24小时。但是,它必须在 0-23 范围内,而不是 24。如果您无法轻松更改这些日期字符串的生成方式,您可以手动解析它:

string dateTimeStr = "05SEP1998 2400";

var provider = CultureInfo.InvariantCulture;

const string Format = "ddMMMyyyy HHmm";
int HourPos = Format.IndexOf("HH");
var hour = dateTimeStr.Substring(HourPos, 2);
bool addDay = hour == "24";
if (addDay)
    dateTimeStr = dateTimeStr.Substring(0, HourPos) + "00" + dateTimeStr.Substring(HourPos + 2);
var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider);
if (addDay)
    dateTime += TimeSpan.FromHours(24);
Run Code Online (Sandbox Code Playgroud)

dateTimeStr请注意,如果字符数不正确,这将引发异常。您可能想更好地处理这个问题。