2009-03-05 14 views
4

Bir asp.net uygulaması yazdım ve geri gönderme rutinlerinden biri kullanıcı tarafından gönderilen form verilerini bir sql 2005 db'ye kaydeder. Tüm geliştirme makinemde harika çalışıyor ancak canlı siteye dağıttığımda ayrıştırma tarihimden geçersiz tarihler alıyorum.C# ve Tarih Kültürü Sorunları

Temel olarak, canlı makinede bir Amerikan tarih formatı bekleniyor, ancak istediğim bu değil. Kullanıcının dd/AA/yyyy biçiminde girebilmesi gerekir. Yani 21/10/2009 gibi geçerli bir tarih canlı sunucudaki hataları döndürür, ancak benim dev makinemde değil. Aşağıda istisna atar koddur.

DateTime dt; 
dt = DateTime.Parse(sdate); 
//sdate in GB dd/MM/yyyy format 

Ayırma yordamını dd/AA/yyyy biçiminde tarih beklemeye zorlamak mümkün mü?

cevap

9

böyle yapın:

System.Globalization.CultureInfo cultureinfo = 
     new System.Globalization.CultureInfo("en-gb"); 
    DateTime dt = DateTime.Parse("13/12/2009", cultureinfo); 
+0

Bu konuda teoriye "12/12/9999" yazıyorsunuz, bu geçerli bir tarih ama insan bakış açısından geçerli değil, bu nedenle buraya koyduğunuz kod, yılın 2012 yılı olduğu tarihte asla başarısız olmayacaktır. hiçbir zaman 9999'un DateTime.MaxValue değerine ulaşmadı – MethodMan

6

Beklenen bir biçimi belirtmek için DateTime.ParseExact kullanabilirsiniz.

+0

... ya birden fazla ... –

4

Başka bir seçenek de web.config dosyasında kullanmak isteyen kültürünü belirtmektir:

<system.web> 
    ... 
    <globalization 
     culture="da-DK" 
     uiCulture="da-DK" requestEncoding="utf-8" responseEncoding="utf-8" 
    /> 
</system.web> 
+0

1! – user65439

2

Evet, ParseExact yapacak Matt tarafından belirtildiği gibi .

kod olurdu gibi bir şey: o yararlı ipucu için

dt = DateTime.ParseExact(sdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);