2009-12-11 27 views
6

herhangi bir dize olabilir DateTime için dize dönüştürmek için DateTime String dönüştürme bir soru gönderdim, bunun için birçok tatmin edici yanıtlar var .. bu yüzden çok StackOverflow teşekkür ederim. . Burada
dize girişimi yapanın bir daha sorun şu ki,
C#: Dize, standart tarih formatı

..

C# kodu kullanarak (bazı harici bir kaynaktan) bir dize dönüştürmek zorunda .. dize DateTime bu beklenen formata sahip olabilir .. şaşırıp
  1. 02/31/2009 01:59:59                   24 saat biçimi
  2. 02/31/2009 01:59:59 AM       12 saat biçimi vb
  3. 2/31/2009 1:59:59
  4. 2/31/2009 1:59:59 AM
  5. 02/01/2009 01:59:59 AM
  6. 2/1/2009 1:59:59
  7. ve .......

ben, Gün vs Ama mükemmel alt dize ile değerleri açamadı çünkü .. .. çalışmıyor dize uzunluğu

olduğu olarak ayın değerlerini kullanmak sureti ile, yani DateTime(Convert.ToInt32(string_date.Substring(6,4)),Int,Int,Int,Int,Int,Int)
kullanarak çalıştı
Ben de "/", " uzay" bir durum oluşmasına atıfta değerlerini ayıklamak için çalıştık DeğiĢiyor ve ":" ama/PM

AM (olmayan) Oluşumuna ile türetmek için şişe boyun olur Sadece Gün, Ay ve Saatlerin uzunluğu değişebilir ..

cevap

23

Sen biçimlerinin listesini alır DateTime.ParseExact aşırı kullanabilirsiniz verilen formatlardan herhangi biri. AM/PM bekleyen formatların, AM/PM olmadan aynı biçimlerden önce görünmesi gerektiğine dikkat edin ("MM/dd/yyyy HH:mm:ss tt", "MM/dd/yyyy HH:mm:ss"'dan önce gelir).istisna durumu kaldırır TryParseExact kullanırken

Açıklamalarda
Henk gibi noktalar Update aynı işlevi kullanılabilir. o çözümleme için başarısız olursa şimdi sadece boş bir başvuru döndürür

private static DateTime? ParseDate(string input) 
{ 
    DateTime result; 
    if (DateTime.TryParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) 
    { 
     return result; 
    } 
    return null; 
} 

: Ayrıca, biraz daha temiz yapılabilir bu null türleri ile eşleştirilmiş. İşte

+4

Bu aşırı yük de TryParseExact için var, bir istisna gelmesine izin yok . –

+0

@Henk: teşekkürler. Bunu bekledim ama bulamadım.Şimdi sadece "TryParse" e baktığımı anlıyorum ... –

+0

+1 Güzel snippet! –

7

TryParseExact yöntemine bir göz atın. İşte ilk dava ile bir örnek:

DateTime date; 
// I changed 02/31/2009 to 01/31/2009 because the first is not a valid date 
if (DateTime.TryParseExact("01/31/2009 01:59:59", "MM/dd/yyyy HH:mm:ss", null, DateTimeStyles.None, out date)) 
{ 
    // string successfully parsed => do something with the date 
} 

Ardından, farklı biçimlerde bir listesini tutmak ve başarılı kadar hepsi ile dizeyi ayrıştırmak deneyebilirsiniz.

+2

başka ETKİLİ var mı yol ..? Birçok satır olarak THOSE MANY HATLARı yazarken kullanacağım acıyı kastediyorum .. –

0

DateTime dt1 = DateTime.ParseExact ("2007/01/01 04:23:12", "yyyy/AA/gg ss: dd: ss", System.Globalization.CultureInfo.CurrentCulture);

DateTime dt = Convert.ToDateTime ("2007/01/01 04:23:12", System.Globalization.CultureInfo.CurrentCulture); geçirilen dize aynı değilse

private static string[] formats = new string[] 
    { 
     "MM/dd/yyyy HH:mm:ss tt", 
     "MM/dd/yyyy HH:mm:ss", 
     "M/dd/yyyy H:mm:ss tt", 
     "M/dd/yyyy H:mm:ss"   
    }; 

private static DateTime ParseDate(string input) 
{ 
    return DateTime.ParseExact(input, formats, CultureInfo.InvariantCulture, DateTimeStyles.None); 
} 

Bu FormatException atacağım:

System.Globalization.CultureInfo.CurrentCulture biçimi param

+0

işe yaramadı .. ama çalışmak için thanx .. –

2

tüm olası biçimleri vardır ..

  1. AA/gg/yyyy 08/22/2006
  2. dddd 2006 22 Ağustos, Salı
  3. dddd, dd MMMM yyyy dd AAAA yyyy SS: 06:30
  4. Ağustos 2006 mm tt Salı,: dd Salı, 22 Ağustos 2006 06:30
  5. dddd, MMMM yyyy ss dddddd, AAAA yyyy H dd: mm Salı, 22 Ağustos 2006 06:30
  6. dddd, AAAA yyyy h dd: dd tt Salı, 22 Ağustos 2006 06:30
  7. dddd, AAAA yyyy HH dd: dd: ss Salı 2006 Ağustos 22 06:30:07
  8. aA/gg/yyyy SS: dd 2006/08/22 06:30
  9. aA/gg/yyyy ss: dd tt 2006/08/22 06:30
  10. aA/gg/yyyy S: dd 08/22/2006 6:30
  11. aA/gg/yyyy SS: dd: ss 2006/08/22 06:30:07'-' AA '-'
  12. AAAA 22 Ağustos
  13. yyyy dd gg'T'SS ':' mm ':' ss.fffffffK 2006-08-22T06: 30: 07.7199222-04: 00
  14. ddd, dd MMM yyyy HH ':' mm ':' ss 'GMT' Sal, 22 Ağu 2006 06:30:07 GMT
  15. yyyy '-' MM '-' dd'T'HH ':' mm ' : 'ss 2006-08-22T06: 30: 07
  16. SS: dd 06:30
  17. hh: dd tt 06:30
  18. S: dd 06:30
  19. h: dd tt 06:30
  20. SS: dd: ss 06:30:07
  21. yyyy '-' AA '-' HH dd ':' mm ':' ss'Z' 2006-08 -22 06: 30: 07Z
  22. dddd, MMMM yyyy HH dd: dd: ss Salı 2006 Ağustos 22 06:30:07
  23. yyyy MMMM Ağustos 2006