5

我遇到了一个问题,我无法从字符串中解析日期和时间,而我正在从文本文件中读取该字符串。我得到的字符串格式如下:

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.

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

4

2 回答 2

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没有正确数量的字符,这将引发异常。你可能想要更好地处理它。

于 2012-06-30T11:53:50.720 回答
0

一天有24小时。但是在写作时,我们说它是从 0 到 23。它对小时格式给出了例外。

我是怎么发现的?

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

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

它在 Hours 上给出了错误Hour. minute and second parameters descrive an un-representable DateTime

于 2012-06-30T11:54:18.893 回答