2013-03-14 6 views
5

Ich habe den folgenden Code -Set Datums- und Uhrzeitformat

DateTime timeStamp; 

timeStamp = System.Convert.ToDateTime(y.InnerText); 

Wo y.InnerText11/03/2013 11:35:24 ist.

Doch diese bricht meine Import-Anweisung, wie es die Datenbank für das Format suchen -

2013-03-11 11:35:24 

Wie kann ich das Format des Datetime-Objekt?

+1

Was der Datentyp Ihrer Datenbankspalte ist, wenn es 'DateTime' dann vermute ich, Sie String-Verkettung verwenden, um Ihre Abfrage zu erstellen. Verwenden Sie parametrisierte Abfragen – Habib

+0

'DateTime' ist unabhängig von Format, nur wenn Sie in eine Zeichenfolge konvertieren würde es am Ende lokalisiert werden. – Lloyd

+0

Wenn die Datenbank 'parameter/field'' datetime type' ist, sollte alles in Ordnung sein. Es ist keine gute Idee, das Datum als Zeichenfolge zu übergeben. Grundsätzlich hat Date kein Format. – Kaf

Antwort

12

Wie kann ich das Format des DateTime-Objekts festlegen?

Sie können nicht. DateTime Werte nicht haben Formate, mehr als int oder double Werte tun. Wenn Sie sie in/aus Strings konvertieren möchten, geben Sie an, in dem Sie Formatierungsinformationen angeben.

Stattdessen sollten Sie parametrisierte SQL verwenden und vermeiden, den Wert DateTime in eine Zeichenfolge an erster Stelle zurück zu konvertieren. Dies ist eine allgemeine Best Practice - fügen Sie keine Werte in Ihre SQL-Zeichenfolge ein. parametrisierte SQL hat mehrere Vorteile:

  • Es vermeidet SQL injection attacks
  • Es vermeidet Konvertierungsprobleme wie diese
  • Es Code hält (SQL) getrennt von Ihren Daten (Parameterwerte)

I würde auch vorschlagen, dass anstelle von Convert.ToDateTime, geben Sie Ihr erwartetes Format beim Parsen an. Zum Beispiel:

timeStamp = DateTime.ParseExact(y.InnerText, 
           "dd/MM/yyyy HH:mm:ss", 
           CultureInfo.InvariantCulture); 

Grundsätzlich sind die beiden Regeln Ich versuche anzuwenden sind:

  • Vermeiden Durchführung jede Umwandlungen, bei denen Sie müssen nicht. Wenn Sie sicherstellen, dass jedes System die richtigen Datentypen verwendet, müssen Sie so gut wie möglich keine Conversions durchführen.
  • Wo Sie do müssen konvertieren zu/aus String-Darstellungen, sehr deutlich über die Darstellung, die Sie konsumieren/produzieren möchten. Für maschinenlesbare Werte sollte normalerweise die invariante Kultur und möglicherweise ein benutzerdefiniertes Datums-/Uhrzeitformat verwendet werden. Bei Werten, die für Menschen lesbar sind, sollte normalerweise die Kultur des Benutzers und ein standardmäßiges Datum/Uhrzeit-Format verwendet werden.
+0

Ausgezeichnete Lernübung! – Ebikeneser

0

können Sie ToString convertion zu 2013-03-11 11:35:24

DateTime timeStamp; 

timeStamp = System.Convert.ToDateTime(y.InnerText).ToString("yyyy-MM-dd HH:mm:ss"); 
1

verwenden, wenn Sie Datetime SQL-Datenbank sind vorbei versuchen, mit yourdatetime.ToString ("yyyy/MM/dd") Format wird dies für Sie arbeiten.

und noch eine Sache, die Sie ein Datetime-Format für Ihre Applicaton Kultur hinzufügen können. also behandelt sie das Datetime-Format auf Wunsch.

using System; 
using System.Globalization; 
using System.Threading; 

namespace test { 
    public static class Program { 
     public static void Main() { 
      CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
      culture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss"; 
      culture.DateTimeFormat.LongTimePattern = ""; 
      Thread.CurrentThread.CurrentCulture = culture; 
      Console.WriteLine(DateTime.Now); 
     } 
    } 
} 
0

Grundsätzlich Datum hat kein Format. Wenn die Datenbank parameter/fieldDatetime type ist, sollten Sie in Ordnung sein als Datum übergeben Typ. Es ist keine gute Idee, das Datum als Zeichenfolge zu übergeben.

Wenn jedoch, dass etwas, das Sie zu tun haben, dann übergeben Sie besser das Datum in einem none culture specific date format (ISO8601 oder ISO) in einer parametrisierte Abfrage. Andernfalls könnten Probleme mit Datenbankservern in verschiedenen Kultureinstellungen auftreten.

Zum Beispiel, für SQL-Server, ist es sicher (in Konvertierung), um Datum Zeit in ISO8601 übergeben als;

'yyyy-mm-ddThh:mi:ss.mmm' //(no spaces) 
0

Und was ist, wenn Sie nur Ihre ToString() -Methode des Datetime-Objekt außer Kraft setzen? Wäre es nicht möglich, das gewünschte Format auszuwählen, und jedes Mal, wenn es verwendet wird, wird es so formatiert, wie Sie es wollen, ohne dass Sie daran leiden.

Das ist nur ein Gedanke, also weiß ich nicht, ob es bessere Lösungen gibt oder nicht.

Sie können dann die Eigenschaften Jahr, Monat, Tag verwenden, um es wie gewünscht zu erstellen. Etwas wie:

public override ToString(){ 
    return this.Year + "-" + this.Month + "-" + this.Day; 
} 

Grüße

+0

Und so haben Sie kein 'Format' für Sie DateTime-Objekt, aber Sie sagen nur, wie es seine ToString-Methode tun soll. –

0

Ich benutze diesen Schritt 1. Konvertieren zu Datetime. 2. Verwenden Sie ToString(); Funktion

Beispiel:

DateTime myDateTime = DateTime.Now; 
string myDateTimeString = myDateTime.ToString("yyyy-mm-dd hh:mm:ss"); 
Verwandte Themen