2012-01-17 30 views
5

Tôi đang gặp lỗi xác thực lạ trong trang ASP.NET MVC 3 với hộp văn bản chấp nhận ngày giờ được chọn qua jqueryui. Các trang web đã được tùy chỉnh để làm việc chỉ với es-ES văn hóa và hoạt động hầu hết thời gian nhưng xác nhận không thành công mỗi tháng nhất định được sử dụng trong hộp văn bản đó. Phương pháp datetime.parse làm việc cho mỗi tháng trừ march:datetime.parse thất bại trong tuần hành bằng tiếng Tây Ban Nha, mỗi tháng khác hoạt động

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} 

...

mỗi tháng công trình trừ tháng, Marzo trong tiếng Tây Ban Nha ...

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

Bất kỳ ý tưởng?

+0

Bạn đã kiểm tra diễn đàn và/hoặc tài liệu trực tuyến? –

+3

Có thể không chắc chắn liệu có diễn giải nó là "mar" cho "marzo" hay "martes" hay không - hãy thử chỉ định định dạng ngày với ParseExact. – Random832

+0

Tôi không gặp vấn đề gì với điều này. Tôi có thể làm điều đó sai mặc dù. Bạn có thể tái sản xuất trong một môi trường thử nghiệm nhỏ hơn (ứng dụng giao diện điều khiển hoặc một cái gì đó) và dán phương pháp để chứng minh? –

Trả lời

5

Tái tạo với 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); 
} 

Hãy thử thiết lập định dạng và các công trình này:

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 thực hiện thủ thuật. Cảm ơn Luke rất nhiều. – dtriana

1

Tôi có cùng một vấn đề với ngôn ngữ Ý.

Chỉ được xác minh bằng phiên bản .NET 4.0 và hoạt động với 2.0.

Salvo.

1

ParseExact sẽ thực hiện thủ thuật nhưng nó yêu cầu phải tái cấu trúc nhiều mã. Vì vấn đề là do không thể phân biệt chữ viết tắt của Marzo và Martes. Tạo một nền văn hóa cụ thể và sửa đổi chữ viết tắt của Martes từ Mar thành Ma như sau:

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 
Các vấn đề liên quan