在C#中,用未知的分隔符和可选的时间元素将年月日字符串解析为一个DateTime。

问题描述 投票:0回答:1

我必须在C#中解析日期字符串。日期都是以年、月、日开始的,但我不知道这三部分之间会有什么分隔符。但是我不知道这三部分之间的分界线是什么。此外,日期字符串还可能在日期之后包含一个时间部分,基本上只要格式是年第一,月第二,日第三,我就应该将其解析为年、月、日。

基本上只要格式是年第一,月第二,日第三,我就应该把它解析为一个有效的日期,而不管使用的是什么分隔符,是否包含时间。任何其他的日期格式都应该作为无效日期被拒绝。

我不知道如何在不写一个很长的ifelse的情况下做到这一点。

考虑到上述限制,我如何将一个字符串解析为C#日期时间对象?

c# datetime parsing date-parsing
1个回答
1
投票

你可以检查输入字符串的长度是否至少是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小时钟?


0
投票

试试这个代码

string yourDateTimeString = ....;
string format="yyyy/MM/dd";
var dt = DateTime.ParseExact(yourDateTimeString,format,null,System.Globalization.DateTimeStyles.AssumeLocal);
© www.soinside.com 2019 - 2024. All rights reserved.