字符串未在where语句中被识别为有效的日期时间

时间:2016-07-27 08:02:50

标签: c# sql linq parsing datetime

我正在使用下面的linq查询来比较一些日期,它的工作原理,但是当我将系统文化改为en-US(我对法国文化的看法)时,它会向我显示错误 字符串未被识别为where部分中的有效日期时间,这是我的查询:

var query = 
    from Ovp c in lOvpReponse.result
     where (DateTime.parse(c.dateEcheance) >= DateTime.Now.AddDays(-90))
        select new
        {
            RefDossier = c.refDossier,
            CompteEmetteur = c.compteEmetteur,
            NomBeneficiaire = c.nomBeneficiaire,
            Montant = c.montant,
            Periodicite = c.periodicite,
            status = DateTime.Parse(c.dateEcheance)>= DateTime.Now ? "Expiré" : "Activé",
        };

希望在这里获得一些快速帮助。

2 个答案:

答案 0 :(得分:1)

当您更改系统的文化时,DateTime.Parse方法将更改其行为并期望以当前系统格式显示日期时间。您可能会遇到此问题,因为c.dateEcheance的格式保持不变,因此不适合现在预期的en-Us语言环境。您必须明确地将Culture作为参数添加到Parse方法中,以便独立地解析它的系统配置。

试试这个:

DateTime.Parse(c.dateEcheance, new CultureInfo("fr-FR"));

或者这个:

DateTime.ParseExact(c.dateEcheance, "dd/MM/yyyy", new CultureInfo("fr-FR"));

答案 1 :(得分:1)

我猜服务会返回法语区域设置中的日期。您可以使用fr-FR区域设置或提供要解析的特定格式。使用this overload of DateTime.Parse

DateTime.Parse(c.dateEcheance, new CultureInfo("fr-FR"))

或者:

DateTime.ParseExact(c.dateEcheance, "dd-MM-yyyy", new System.Globalization.CultureInfo("fr-FR"))