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

时间:2012-06-30 11:45:31

标签: 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);

但是在解析时,上面的代码抛出了一个FormatException:

String was not recognized as a valid DateTime.

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

2 个答案:

答案 0 :(得分: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);

请注意,如果dateTimeStr没有正确的字符数,则会抛出异常。你可能想要更好地处理它。

答案 1 :(得分:0)

一天24小时。但是在写作时我们说的是0-23。它以小时格式提供例外。

我是如何找到的?

我尝试从您的字符串中创建一个DateTime对象,如

DateTime dt = new DateTime(1998, 9, 5, 24, 0, 0);

它在Hour. minute and second parameters descrive an un-representable DateTime

的小时数上出错