datetime.parse用西班牙语进行游行,每隔一个月工作一次

时间:2012-01-17 18:10:26

标签: asp.net-mvc datetime

我在ASP.NET MVC 3站点中有一个奇怪的验证失败,其中一个文本框接受通过jqueryui选择的日期时间。该网站已经过定制,仅适用于es-ES文化,并且大部分时间都可以使用,但在该文本框中每次使用某个月时验证都会失败。 datetime.parse方法适用于除march以外的每个月:

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}

...

除了3月份,每个月都有工作,西班牙语的Marzo ......

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."}

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

使用NUnit进行再现:

[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);

答案 1 :(得分:1)

我对意大利语有同样的问题。

仅使用.NET 4.0版本进行验证,并使用2.0。

齐射。

答案 2 :(得分: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