我遇到了一个问题,我无法从字符串解析日期和时间,我正在从文本文件中读取。我得到的字符串采用以下格式:
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.
有人可以帮我解决这个问题吗?
答案 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