2016-07-27 63 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,但當我搬到我們的文化時我仍然有同樣的錯誤 –

相關問題