2012-01-17 7 views
5

jqueryuiで選択したdatetimeを受け付けるテキストボックスを使用して、ASP.NET MVC 3サイトで奇妙な検証エラーが発生します。サイトはes-ES文化のみで動作するようにカスタマイズされていますが、ほとんどの場合は動作しますが、そのテキストボックスで特定の月が使用されるたびに検証が失敗します。 datetime.parse方法は行進を除いて毎月のために働く:datetime.parseスペイン語で行方不明、毎月動作する

DateTime.Parse("15-feb-2012",CultureInfo.GetCultureInfo("es"), DateTimeStyles.None) 
{15/02/2012 0:00:00} 
    Date: {15/02/2012 0:00:00} 

DateTime.Parse("15-ene-2012",CultureInfo.GetCultureInfo("es"), DateTimeStyles.None) 
{15/01/2012 0:00:00} 
    Date: {15/01/2012 0:00:00} 

DateTime.Parse("15-abr-2012",CultureInfo.GetCultureInfo("es"), DateTimeStyles.None) 
{15/04/2012 0:00:00} 
    Date: {15/04/2012 0:00:00} 

...

月、スペイン語でマルゾー除いて毎月の作品...

DateTime.Parse("15-mar-2012",CultureInfo.GetCultureInfo("es"), DateTimeStyles.None) 
DateTime.Parse("15-mar-2012",CultureInfo.GetCultureInfo("es"), DateTimeStyles.None)' threw an exception of type 'System.FormatException' 
    base {System.SystemException}: {"String was not recognized as a valid DateTime."} 

任意のアイデア? NUnitので再現

+0

あなたの文化固有の月の略語が正しいことを確認しましたか? –

+3

「marzo」または「martes」の「mar」と解釈するかどうかは不明です。ParseExactで日付形式を指定してみてください。 – Random832

+0

私はこれに問題はなかった。私は間違っているかもしれない。小さなテスト環境(コンソールアプリケーションなど)で再現して、証明する方法を貼り付けることができますか? –

答えて

5

[Test] 
[ExpectedException(typeof(FormatException), ExpectedMessage = "String was not recognized as a valid DateTime.")] 
public void ParsingWithAbbreviatedSpanishMarchBlowsUp() 
{ 
    var dt = DateTime.Parse("15-mar-2012", CultureInfo.GetCultureInfo("es-ES"), DateTimeStyles.None); 
} 

して書式を設定してみてください、これは動作します:

var format = "dd-MMM-yyyy"; 
var input= "15-mar-2012"; 
var dt = DateTime.ParseExact(input, format, new CultureInfo("es-ES")); 
Console.WriteLine(dt); 
+0

ParseExactがトリックをしました。ルークに感謝します。 – dtriana

1

私はイタリア語で同じ問題を持っています。

.NET 4.0バージョンでのみ検証され、2.0で動作します。

サルボ

1

ParseExactはこのトリックを行いますが、多くのコードをリファクタリングする必要があります。問題はMarzoとMartesの略語を区別できないことが原因です。特定のカルチャーを作成し、MarからMaへのMartesの省略形を次のように変更してください:

Dim ci As CultureInfo = CultureInfo.CreateSpecificCulture("es-US") 
Dim dtfi As DateTimeFormatInfo = ci.DateTimeFormat 
dtfi.AbbreviatedDayNames = {"Dom", "Lun", "Ma", "Mie", "Jue", "Vie", "Sab"} 

CultureInfo.DefaultThreadCurrentCulture = ci 
System.Threading.Thread.CurrentThread.CurrentUICulture = ci 
System.Threading.Thread.CurrentThread.CurrentCulture = ci 
関連する問題