2016-07-27 6 views
1

次の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

'c.dateEcheance'の値は何?あなたの現在の日付時刻設定はあなたのマシンで何ですか? –

+0

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

+0

@PatrickHofman私の現在の日時設定はすべてフランス語でしたが、私はen-USで実行されている別のマシンにこのプロジェクトを移動したときにこのエラーが発生し、日付値の形式は30/04/2034でした。 –

答えて

1

システムのカルチャを変更すると、DateTime.Parseメソッドは動作を変更し、現在のシステム形式のdatetimeを期待します。 c.dateEcheanceの形式が同じであるため、現在想定されているen-Usロケールに適合しないため、この問題が発生する可能性があります。 ParseメソッドにCultureパラメータを明示的に追加して、システム構成とは独立して解析する必要があります。私はサービスがフランス語のロケールで日付を返す推測

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

*カルチャを変更しても、c.dateEcheanceの形式は変更されません。* Duh、構文解析に使用する形式は... –

+0

@PatrickHofman彼はその後、エラーを取得していないので、フランス文化で。 – Marwie

+0

文化はすでにフランス語です。それを明示的にフランス語に設定しても違いはありません。 –

1

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

またはこの:

はこれを試してみてください。 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を使いましたが、私たちの文化に移っても同じエラーが表示されます –

関連する問題