2008-09-15 19 views
5

Ktoś proszę poprawić mnie, jeśli się mylę, ale parsowanie daty rrrr/MM/dd (lub innych określonych formatów) w C# powinno być tak proste jak jakoParsowanie dokładnych dat w języku C# nie powinno wymuszać utworzenia IFormatProvider

DateTime.ParseExact(theDate, "yyyy/MM/dd"); 

ale nie, C# zmusza do utworzenia IFormatProvider.

Czy jest jakiś sposób ustawienia tego w app.config, więc nie muszę tego robić za każdym razem?

DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true)); 

Odpowiedz

14

Argument IFormatProvider może mieć wartość null.

+0

Z dokumentacji MSDN: "Jeśli dostawca jest odwołaniem zerowym (Nic w Visual Basic), używany jest obiekt CultureInfo odpowiadający aktualnej kulturze." –

+0

Zdaję sobie sprawę, że nie powinienem sugerować, że należy użyć app.config. Dostałeś to, czego chciałem - "po prostu przeanalizuj datę i nie zawracaj mi głowy rzeczami, na których mi nie zależy". Dzięki. – AlanR

3

Utwórz metodę rozszerzenia:

public static DateTime ParseExactDateTime(this string dateString, string formatString) { 
    return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true)); 
} 
+0

Dzięki Will. Naprawdę nie sądziłem, że bardzo dobrze. –

5

Użyj bieżącego kulturę aplikacji:

DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture); 

Można ustawić kultury aplikacji w app.config za pomocą znacznika globalizacji. Myślę.

1

Można również po prostu utworzyć IFormatProvider i przechowywać go do późniejszego wykorzystania.

1

Można również użyć klasy Convert

Convert.ToDateTime("2008/11/25"); 
6

ParseExact potrzebuje kultury: rozważyć "yyyy MMM dd". MMM będzie lokalną nazwą miesiąca, która używa aktualnej kultury.

3

Wymaga dostawcy formatu w celu określenia konkretnych symboli i łańcuchów daty i godziny (takich jak nazwy dni tygodnia w danym języku). Możesz użyć wartości pustej, w którym to przypadku używany jest obiekt CultureInfo, który odpowiada aktualnej kulturze.

Jeśli nie chcesz określać go za każdym razem, utwórz metodę rozszerzenia, która przekazuje wartość null lub CultureInfo ("en-CA", true) jako dostawcę formatu.

0

// datę Konwersja do formatu kompatybilnego MySql

DateTime DateValue = Convert.ToDateTime (datetimepicker.text);

string datevalue = DateValue.ToString ("rrrr-MM-dd");

0

Co jest nie tak z użyciem Globalization.CultureInfo.InvariantCulture?

+0

Nic, po prostu nie chcę zaśmiecać mojego kodu w ten sposób, ponieważ Globalizacja nie jest problemem w naszym sklepie. – AlanR