我必须在C#中解析日期字符串。日期都是以年、月、日开始的,但我不知道这三部分之间会有什么分隔符。但是我不知道这三部分之间的分界线是什么。此外,日期字符串还可能在日期之后包含一个时间部分,基本上只要格式是年第一,月第二,日第三,我就应该将其解析为年、月、日。
基本上只要格式是年第一,月第二,日第三,我就应该把它解析为一个有效的日期,而不管使用的是什么分隔符,是否包含时间。任何其他的日期格式都应该作为无效日期被拒绝。
我不知道如何在不写一个很长的ifelse的情况下做到这一点。
考虑到上述限制,我如何将一个字符串解析为C#日期时间对象?
你可以检查输入字符串的长度是否至少是10个字符,如果是,通过查看字符串中的第5个字符来计算出分隔符应该是什么。
然后,你可以使用分隔符来构造一个格式字符串,并将其传递给 DateTime.TryParseExact()
来解析日期。你还必须将日期字符串截断为10个字符,以忽略最后的日期部分。
一个例子的实现是这样的--如果日期没有被解析,它返回null;否则,它返回正确解析的日期。
public static DateTime? ParseDateWithUnknownDivider(string dateStr)
{
if (dateStr.Length < 10)
return null;
char divider = dateStr[4];
if (DateTime.TryParseExact(
dateStr.Substring(0, 10),
$"yyyy\\{divider}MM\\{divider}dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime result))
return result;
return null;
}
请注意,这将忽略时间部分,并将总是返回时间部分为00:00:00。如果这不是你的意思,你需要在你的问题中指定时间部分是什么样子的。例如,它会和日期部分用空格隔开吗?它是否总是hh:mm:ss?会不会是24小时钟?
试试这个代码
string yourDateTimeString = ....;
string format="yyyy/MM/dd";
var dt = DateTime.ParseExact(yourDateTimeString,format,null,System.Globalization.DateTimeStyles.AssumeLocal);