2016-07-27 55 views
1

即时使用以下linq查询来比较某些日期,它的工作,但当我将系统文化更改为en-US(我在法国文化)它显示我错误 字符串未被识别为WHERE部分的有效日期时间,这是我的查询:字符串未被识别为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

什么是'c.dateEcheance'价值?您的机器上当前的日期时间设置是什么? –

+0

[DateTime.Parse](https://msdn.microsoft.com/en-us/library/kc8s65zs(v = vs.110).aspx)。 – Sinatr

+0

@PatrickHofman @PatrickHofman我目前的datime设置是法国的每件事都可以,但是当我将该项目移动到另一台在en-US上运行的计算机时,给了我这个错误并且日期值格式为30/04/2034 –

回答

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

*即使你改变了文化,c.dateEcheance的格式也不会改变。* Duh,它用来解析的格式是... –

+0

@PatrickHofman很高的可能性一个日期在法国文化中,因为他没有得到错误。 – Marwie

+0

文化已经是法国的。明确地将其设置为法语并没有什么区别。 –

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")) 
+0

没有什么改变,我仍然有相同的错误 –

+0

你在这两种情况下使用过吗? –

+0

正常的datetime.parse只适用于法国文化,我使用了datetime.parseExact,但当我搬到我们的文化时我仍然有同样的错误 –

相关问题