2009-03-06 27 views
0

Ich habe Probleme mit Daten zu arbeiten. Ich brauche eine DateTime-Instanz mit dem Format "TT-MM-JJJJ". Ich verlange NICHT, dass ich eine Zeichenfolge meiner Datumsinstanz in der "dd-MM-yyyy" habe, die ich kenne.Datum Kultur Format Probleme

Ich muss mein Date obj durch das Entity Framework Saatgut, das ruft eine gespeicherte Prozedur, die eine param, dass es ein Datum erhält ...

kann ich immer meine gespeicherten Prozedur ändern, um eine Varchar statt Datum zu erhalten , aber ich möchte Sicherheit geben.

Der folgende Code können Sie das Problem verstehen helfen:

Dim s1 As String = CurrentUICulture.ToString() 'pt-PT 
Dim s2 As String = CurrentCulture.ToString()'pt-PT 
Dim odate As Date = DateTime.ParseExact(sdate, CurrentUICulture.DateTimeFormat.ShortDatePattern, CurrentUICulture) 'sdate = 19/03/2009 
'CurrentUICulture = pt-PT - ShortDatePattern = "dd-MM-yyyy" 
'odate is 03/19/2009 !!! 

Convert.ToDateTime(sdate, CurrentUICulture) 
'its the same! 

HILFE!

+0

bitte Ihren Code einrücken, so ist es leichter zu lesen ... –

Antwort

0

Problem gelöst ... da gibt es kein Problem in erster Linie war !

Die Sache ist ich eine Funktion wurde mit der so etwas wie diese

GetFormatedDate(ByVal sdate As String) As Date 

und ... wenn der sdate ist nichts (oder null) Ich hatte ein ungültiges Datum ist, wenn es der gespeicherte SQL-Prozedur erreicht.

ValueTypes nicht nichts hat einen Wert ... aber es ist möglich, dies zu tun:

GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date) 

mit, dass ich nicht mehr eine ungültige param Exception.

ja!

1

DateTimes haben kein Format. Sie sind auch keine Instanzen, da DateTime ein Werttyp ist.

Es scheint mir, Sie denken, die DateTime ist "falsch formatiert" (Sie behaupten, es ist 03/19/2009). Wie haben Sie den Wert von Odate überprüft? Indem Sie es als odate.ToString() ausgeben oder seinen Wert in einem Debugger-Fenster überprüfen? Versuchen Sie es ausdrucken mit:

Debug.Print odate.ToString(_ 
    Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _ 
    Globalization.CultureInfo.CurrentUICulture) 

odate ist nur ein Datetime - es enthält die Anzahl der Sekunden seit einiger Datum vor langer Zeit (welche ich kann nicht erinnern jetzt gestört werden). Es hat keine Formatierungsinformationen und wird daher bei der Ausgabe formatiert.

Die Tatsache, dass das Datum 19.03.2009 ist, bedeutet, dass Ihre Analyse erfolgreich war. 19.03.2009 ist der 19. März 2009 (der 3. des 19. Monats ist kein gültiges Datum). Also aufhören, sich Sorgen zu machen und weitermachen ;-)

+0

„Mir scheint, denken Sie, die Datetime ist‚falsch formatiert‘(“ Ich glaube nicht ... Ich weiß! checkte ich in Debug-Modus Übrigens: "DateTime-Konstruktor (Int32, Int32, Int32, Int32, Int32, Int32, Kalender) Initialisiert eine neue Instanz der DateTime-Struktur – Txugo

+0

zum angegebenen Jahr, Monat, Tag, Stunde, Minute und Sekunde für den spezifizierten Kalender. "Instance! Und es hat Formatierungsinformationen. Und ich brauche es, also habe ich keine Überlaufausnahme zurück von sql srv. So, wenn Ihr nicht smart enouth, um die Frage zu beantworten noch zu unterwerfen. ..not botter zu schreiben. – Txugo

0

Immer wenn es um Daten und SQL Server geht (von denen ich annehme, dass Sie auch hier sind), würde ich das ISO-8601 Format empfehlen - es sollte unabhängig von Ihrer Sprache und Kultur funktionieren oder andere Einstellungen.

ISO-8601 definiert das Datumsformat wie folgt: YYYY-MM-DD (mit oder ohne Bindestriche; JJJJMMTT ist ebenfalls zulässig).

Funktioniert das?

Dim oDate as Date = DateTime.Parse("2009-03-06") 

für ein Datum vom 6. März 2009

Siehe auch: http://www.w3.org/TR/NOTE-datetime

und: http://www.cl.cam.ac.uk/~mgk25/iso-time.html