2008-12-03 20 views
6

dumme Fragen, aber können nicht meinen Kopf um es bekommen ... Ich habe eine Zeichenfolge in diesem Format 20081119Zeichenfolge zu Datetime-Konvertierung in C#

Und ich habe eine C# Methode, die die Zeichenfolge in ein Datetime konvertiert werden eingegeben in eine SQL Server DB

public static DateTime MyDateConversion(string dateAsString) 
    { 

     return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); 

    } 

das Problem ist, dass das Datum wie diese herauskommen wird: Date = 19.11.2008 12.00.00 und ich brauche es eine Datetime-Typen yyyyMMdd wie ich zu sein mappe es in ein Schema, um einen gespeicherten proc aufzurufen.

Vielen Dank im Voraus Jungs.

Cheers, Con

+0

wo sehen Sie die dateTime von yyyyMMdd? Was senden Sie an Ihren BizTalk-Mapper? –

Antwort

1

Datum Zeit ist eine Klasse, die in der Standardeinstellung formatiert ToString als 19/11/2008 00.00.00

Dies ist von MSDN ist, die Sie

helfen kann

da das Auftreten von Datum und Werte Zeit auf solche Faktoren wie Kultur abhängt, international Normen, Anwendungsanforderungen, und persönliche Präferenz, die DateTime Struktur bietet eine große Menge von Flexibilität in Formatierungsdatum und Zeitwerte durch die Überladungen von seine ToString-Methode. Die standardmäßige DateTime.ToString() -Methode gibt die Zeichenfolgendarstellung eines Datums und den Zeitwert unter Verwendung des Kurzzeit- und Langzeitmusters der aktuellen Kultur zurück. Das folgende Beispiel verwendet die Standard DateTime.ToString (Methode) Datum und Uhrzeit mit dem kurzen Datum und lange Zeitraster für die en-US Kultur, die aktuelle Kultur auf den Computer das Beispiel, auf das angezeigt wurde Lauf.

Sie können in der Lage sein, damit die ToString auf Datetime in das gewünschte Format zu überlasten, sonst die Stringdarstellung direkt auf die gespeicherte Prozedur übergeben, statt

13

Es gibt so etwas wie „Datetime-Typ-Nr yyyyMMdd "; Eine DateTime ist nur eine große Ganzzahl, die die Zeit in einer Epoche angibt - sie hat kein Format. Aber das ist in Ordnung, da Sie sowieso parametrisierten TSQL verwenden sollten - fügen Sie also einfach DateTime als Wert eines DbParameters hinzu, und es wird der db eindeutig übergeben (verwenden Sie keine String-Verkettung, um einen TSQL-Befehl zu erstellen)):

DbParameter param = cmd.CreateParameter(); 
param.ParameterName = "@foo"; 
param.DbType = DbType.DateTime; 
param.Value = yourDateTime; // the DateTime returned from .ParseExact 
cmd.Parameters.Add(param); 

oder für eine SqlCommand:

cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime; 

Wenn Sie wirklich eine Zeichenfolge benötigen, dann benutzen Sie einfach die Zeichenfolge direkt als [n] [var] char Parameter.

auch - in diesem Fall das Datum analysieren ich die invariante Kultur verwenden würde (da Kultur im Format verfügt nicht):

DateTime yourDateTime = 
      DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture); 

Aus dem Gespräch, es scheint, dass Sie auch vielleicht brauchen gehen von einem Datetime in einen String, in welchem ​​Fall sie einfach umgekehrt:

string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture); 
+1

Eigentlich sollte ich erwähnen, dass ein paar Bits für utc Offsets reserviert sind - aber * hauptsächlich * es ist nur eine große ganze Zahl ;-p –

0

ich denke an die Kultur in Current gesetzt fällig, ohne zu wissen, was das ist, kann ich nicht sicher sein, aber die Angabe en-US arbeitet an meinem Ende. Hier ist der Code, den ich habe:

var dateString = "20081119"; 
var enUS = new System.Globalization.CultureInfo("en-US"); 
var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS); 
Console.WriteLine(resultingDate.ToString()); 

Probieren Sie es aus und sehen Sie, ob es für Sie funktioniert.

+0

Ich kann nicht sehen Kultur beeinflussen das obige Format ... es ist bereits vollständig explizit, mit keine Platzhalter. –

+0

Die Kultur war der einzige Grund, warum ich für Datum und Monat Positionen wechseln konnte ... Es war das einzige, was mir einfiel. –

0

Dies ist, was genaues Ergebnis geben Sie suchen:

convert (varchar (10), getdate(), 112): Datetime string (YYYYMMDD-Format)

convert (datetime " 20081203' , 112): Zeichenfolge DATETIME (YYYYMMDD Format)

-Code-Seite:

Datetime fmt = (neue Culture ("HR-HR").) Datetimeformat; Console.WriteLine (thisDate.ToString ("d", fmt)); // Anzeige 15.3.2008 (verwenden ähnliche Formate nach Ihren Anforderungen)

oder

date1.ToString ("JJJJMMTT", CultureInfo.CreateSpecificCulture ("en-US")) date1.ToString ("JJJJMMTT ");

Details unter http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+0

Das deckt die TSQL Seite - aber die ursprüngliche Frage war auf der C# Seite –

+0

Bitte überprüfen Sie die bearbeitete Version – Samiksha

1

Ok, zurück zur Kultur Sache ... Wenn Sie sagen:

das Datum wird wie folgt herauskommt: Datum = 19.11.2008 12 : 00: 00 AM

Ich schätze, Sie laufen ein ToString am Datum, um dieses Ergebnis zu sehen? Die Formatierung in ToString variiert basierend auf der Kultur und verwendet standardmäßig Ihre aktuelle Kultur.

ich war in der Lage, das Format Ihrer bekommen, indem Sie diese zu reproduzieren:

var dateString = "20081119"; 
var fr = new System.Globalization.CultureInfo("fr-FR"); 
var resultingDate =DateTime.ParseExact(dateString,"yyyyMMdd",System.Globalization.CultureInfo.CurrentCulture); 
Console.WriteLine(resultingDate.ToString(fr)); 

Sie haben ein gültiges Datum, so dass die Formatierung sollte keine Rolle spielen, aber wenn es funktioniert und was Sie brauchen, um es in das Format, das Sie beschrieben haben, dann müssen Sie es formatieren, wenn Sie in eine Zeichenkette konvertieren ... wenn es bereits eine Zeichenkette ist, dann ist keine Datumsumwandlung erforderlich.

Ich könnte Ihre Frage falsch lesen, aber ich musste es aus, b/c es nervte mich.