2010-11-16 39 views
6

C# bir DateTime nesnesine aşağıdaki String ayrıştırmak çalışılıyor:DateTime.ParseExact hiç çalışmıyor, neden?

DateTime.ParseExact("20101108 230125", "yyyyMMdd hhmmss", null) 

değeri ParseExact yöntem sadece aşağıdaki veriyor Sayfa doğru görünüyorsa rağmen:

dize olarak tanınmadı geçerli bir DateTime.

Herhangi biri bana neden ve yukarıdaki dizeyi manuel olarak yapmak zorunda kalmadan nasıl ayrıştırabileceğimi söyleyebilir mi? Bu tür durumlar için ParseExact olması gerekmiyor mu?

cevap

21

Yanlış saat formatını var harfli olması gerekirken:

DateTime.ParseExact("20101108 230125","yyyyMMdd HHmmss", null) 

Küçük harf hh zaman (AM/PM ile) 12 saat biçimini kullandığını belirtmektedir. Uppercase HH, 24 saatlik bir saattir.

Detaylı bilgi için, documentation of custom DateTime format strings'u kontrol edin. kullanılarak

+0

Bu neden bir istisna oluşturuyor? Şahsen hh'yi bir istisna atmak yerine 23'e dönüştürmesini beklerdim. ParseExact neden olur? –

+1

@Marcus: 'ParseExact', yazdığı şeyi yapacak; Belirtilen * tam * biçimini kullanarak dizeyi ayrıştırın. Saat, bu konumda 12 saatlik bir saat süresinin beklendiğini söyleyeceğinden, '23' açıkça kabul edilebilir değerlerin aralığının dışında kalır. Tam dizeyi ayrıştırır, hiçbir dönüşüm yapılmaz. Yani evet, istisna 'ParseExact' yöntemi tarafından atılır. –

+0

Genişletilmiş açıklama için alkışlar. :) –

2

Dene:

var dt = DateTime.ParseExact("20101108 230125", "yyyyMMdd HHmmss", null) 

"hh" 12 saatlik zaman ve 24 saat boyunca "HH" içindir.

+0

Oops, Fredrik'in cevabını gördü ... –

İlgili konular