转换日期表示不支持

时间:2018-05-15 12:26:27

标签: c#

我正在尝试将日期转换为yyyyMMdd格式,但它表示支持的日期。

public override object StringToField(string from)
{
        try
        {
            string[] elements = from.Trim().Split(new char[] { ' ' });

            string date = RemoveNonNumericCharacters(elements[0]);

            return DateTime.ParseExact(date,"yyyyMMdd",CultureInfo.InvariantCulture,DateTimeStyles.None);
        }
        catch (Exception ex)
        {
            throw new Exception(string.Format("Invalid date: {0}", from));
        }
 }

它只是试图转换这个,所以我不明白05/02/2018 22:28。

  

日历中不支持字符串表示的DateTime   System.Globalization.GregorianCalendar。

编辑2

显示删除数字字符

private string RemoveNonNumericCharacters(string item)
{
        string result = "";

        foreach (char character in item)
        {
            if (char.IsNumber(character))
            {
                result += character;
            }
        }

        return result;
 }

编辑3

解析前的日期结果:06022018

2 个答案:

答案 0 :(得分:3)

05/02/2018不是yyyyMMdd。您的RemoveNonNumericCharacters方法可能会将其转换为05022018,因此0502年,第20个月,第18天。将您传递给ParseExact的字符串格式更改为ddMMyyyyMMddyyyy(不清楚)哪个)。

答案 1 :(得分:0)

在第3次编辑中,您显示了collection.Find(filter1 & filter2 & filter3) (“06022018”)字符串,该字符串为“MMddyyyy”格式,

假设在这个日期6是月份(不是日期)

您无法通过执行来解析它到目前为止,

collection.Find(Builders<BsonDocument>.Filter.And(filter1, filter2, filter3))

因为那样你就像年份一样:0602,月:20,日期:18。

这里月:20是不可能的。

你需要一个字符串“20180602”而不是“06022018”来解析你试图解析的方式。

但是如果日期字符串的格式是固定的,那么你就需要它。

你需要改变你的解析,如下所示,

date

如果6是日期,

DateTime.ParseExact(date,"yyyyMMdd",CultureInfo.InvariantCulture,DateTimeStyles.None);