2010-10-05 20 views
7

Bir DateTime'a dönüştürmek için bir dizeyi ayrıştırma yapıyorum.DateTime.Parse: kültürü değiştirirken istisna

String was not recognized as a valid DateTime. 

Ben ABD daha farklı bir ülkede bulunan bir bilgisayardan uygulamayı çalıştırmak yalnızca bu hatayı alıyorum: Bazı durumlarda bir hata alıyorum. Dizede gördüğüm şey 09/20/2010 14:11 ve bu durumda bir istisna alıyorum. Eğer bir değerim varsa: 10/05/2010 12:54 Bir istisna alamıyorum. Sanırım günün 20 ve bu bilgisayarın Avrupa'da olduğu gerçeği, bu yüzden o ayın 20 olduğunu düşünüyor. Sorun tr olmasını zorlamak geçerli:

CompletedDttm = DateTime.ParseExact(value, "MM/dd/yyyy hh:mm", new CultureInfo("en-US")); 

ben istisna alıyorum Çünkü bu doğru bir yaklaşımdır emin varsayalım.

Bir dizeyi makinede çalıştırdığım kültürden bağımsız olarak çalışacak şekilde nasıl ayrıştırılabileceğine dair bir fikriniz var mı?

+0

Biçimin her zaman böyle olacağını biliyorsanız, DateTime.Parse (value, CultureInfo.InvariantCulture); Tarih ve saat formatı bakımından InvariantCulture kabaca ABD'ye eşittir. BTW, bunun gibi ayrıştırırsanız, .Net saat dilimini belirleyemez ve aslında DateTime'ınızı hatalara neden olabilecek "belirtilmemiş yerel" olarak ele alır. Kaynağın UTC'de olduğunu biliyorsanız: DateTime.Parse (value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); –

cevap

10

"ss: dd" yerine "HH: mm" yi kullanmalısınız - "HH" 24 saatlik saat içindir; "hh" 12 saatlik bir saat içindir. Yani 14, "hh" için geçerli bir değer değil.

ABD'deki bir makinede bile aynı sorunu görmeyi beklerdim ... belki de, saat dilimindeki farklılıklar nedeniyle ABD makinelerinizde yalnızca 1-öncesi zamanlar aldınız mı?

+0

Sanırım sorun buydu. Şuan çalışıyor. – tony

+0

Yardım istemi için çok teşekkürler Tony – tony