Wie funktioniert CultureInfo.InvariantCulture und DateTime in String funktioniert
Suche ich schon nach Informationen im Internet über diese optionalen parameter, CultureInfo.InvariantCulture bei der Formatierung .NET
Dieser Artikel erläutert darüber: Was bedeutet cultureinfo invariantculture bedeuten , Was ist die invariante Kultur. Aber es ist immer noch nicht klar für mich.
Ich verwalten möchten und speichern Sie eine datetime-variable als das format 'JJJJMMTT' und ich habe es wie folgt formatiert:
DateTime localDateTime = DateTime.Today; //> 2016-02-10 12:33
string formattedDateTime = localDateTime.ToString("yyyyMMdd"); //> 20160210
Ist es suppossed eine varchar-Spalte in der db mit einer Länge von 8. Aber in einem bestimmten Fall begann es zu speichern 7 chars. Ich warte, um zu bekommen Zugang zu unserem Kunden-domain zu überprüfen, die gespeicherten format.
Jeder Benutzer kann jedoch einstellen, egal in welcher Kultur, in das system (z.B. "en", "es", "fr"), so dass selbst wenn Sie die Methode ToString, die gezwungen format "JJJJMMTT", muss ich die invariante Kultur? Wenn nicht, könnte ich riskieren, um meine datetime in string mit einem anderen format? Hat die regionale Konfiguration in Datenbank-server-Rolle?
Ist, dass ich bin versucht zu tun, gerade jetzt, aber nicht sicher, ob dies das problem lösen wird, nachdem wir den check-in-tests:
DateTime localDateTime = DateTime.Today;
string formattedDateTime = localDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture); //> 20160210
Dies ist ein weiterer Bereich, wenn ich bauen meine variable aus Datenbank und speichern Sie es in einer gespeicherten Prozedur, ich bin dabei:
CONVERT(varchar, getdate(), 112) --ISO for yyyymmdd
EDIT:
Haben wir einige tests:
DateTime currentDateTime = dateParameter; //10/2/16 12:33 PM
string dateParameterAsString = dateParameter.ToString(); //"10/2/16 12:33 PM"
string formattedIdentifier = dateParameter.ToString(System.Globalization.CultureInfo.InvariantCulture); //"02/10/2016 12:33:00"
string formattedIdentifier2 = dateParamter.ToString("yyyyMMdd"); //"20160218"
string formattedIdentifier3 = dateParamter.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); //"20160218"
Wenn Sie versuchen, um die Konvertierung rein für den Aufbau einer SQL-string, Sie wären besser dran mit
SqlParameter
sIn der Tat sind wir mit einem datime Spalte in der db für diese datetime-Wert. Doch nach einigen Auswertungen werden in unseren Prozessen, speichern wir diesen Wert als identifier für biz-Zwecke in einer anderen Spalte.
YYYMMDD ist nicht die richtige format-string zu konvertieren, wird ein datetime in einen string. (yyyyMMdd) und mit diesem format Sie brauchen keine CultureInfo, aber gehen Sie zurück zu Kommentar #1 bitte
diese Frage ist deutlich mit sql server, mit dem eine datetime-Datentyp. Die Tatsache, dass sqlite nicht, ist ein klares Indiz dafür, dass es ist eine Technik, würde ich weglaufen, so schnell wie möglich. Was ein massiver Mangel.
InformationsquelleAutor Maximus Decimus | 2016-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Ihren Anwendungsfall mit Angabe der Kultur explizit als
CultureInfo.InvariantCulture
ist nicht absolut notwendig.Für den format-string
"yyyyMMdd"
alle Komponenten Ausgang nur integer-Zeichen, und zufällig unberührt von Kultur. MitCultureInfo.InvariantCulture
könnte eine kleine Verbesserung der performance (erübrigt sich das nachschlagen des aktuellen Threads Kultur), und ist nicht eine schlechte Sache zu bekommen in die Gewohnheit, wenn Sie entwickeln wollen, gegen die sehr spezifische Informationen. Es wäre nur ein Problem, wenn Sie wurden mit"ddd"
oder irgendetwas anderes, das die Namen von Monat, Tag, etc. (oder einfach über.ToString()
ohne Parameter, die hätte die ganze Sache bestimmt sich durch die aktuellen Threads Kultur)Sagte, dass, lassen Sie uns einen Blick auf die anderen Frage ist hier: erstellen Sie Zeichenfolgen in Ihrer Datenbank speichern. Warum wird das hier getan, anstatt in der presentation layer? Sind Sie nicht mit parametrisierten Abfragen?
Bitte, bitte, bitte verwenden Sie parametrisierte Abfragen. Sehen Wie und Warum der Verwendung von Parametrisierten Abfragen
InformationsquelleAutor willaien
Wie du schon erwähnt hast in den Kommentaren, haben Sie eine datetime-Feld, und Sie gehen, um eine Charakter-Darstellung. In diesem Fall schlage ich vor, Sie verwenden eine berechnete Spalte und tun alles, was in der Datenbank-Ebene.
InformationsquelleAutor FLICKER