我正在使用下面的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é",
};
希望在这里获得一些快速帮助。
答案 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"))