Hallo Jungs und Mädels,
ich habe da mal ein eine kleine Frage an euch.
Ich habe eine Datenbankspalte Datum ( Typ: String ), welches vom Benutzer mit einem Datumsstempel gefüllt wird.
Z.B. 08.04.2008
04/08/2008
20080408
08042008
2008-04-08
08-04-2008
usw.
Nun würde ich gern mit
DateTime.ParseExact den jeweiligen String in ein gültiges DateTime Objekt konvertieren und diesen dann mit .ToString( "dd.MM.yyyy" ) ausgeben.
Solange ich das Format kenne funktioniert das ganze auch.
Wenn ich aber das Format nicht weiß, was mache ich dann.
Ein TryParse usw. möchte ich eigentlich nicht machen.
Gibt es soetwas wie
DateTime.ParseExact( myDate, string[] ich enthalte alle möglichen Datums-Formate, DateTimeStyle welches mit allen möglichen Formaten funktioniert )
Gibt es soetwas wie
Mir fehlt bei diesem Schlusssatz die richtige grammatikalische Formatierung (deshalb verstehe ich nicht, was Du damit sagen willst); aber das ist doch genau das, wonach Du suchst:
**DateTime.ParseExact-Methode (String, String[], IFormatProvider, DateTimeStyles) **
Konvertiert die angegebene Zeichenfolgenentsprechung einer Datums- und Uhrzeitangabe unter Verwendung des angegebenen Formatarrays, der kulturabhängigen Formatierungsinformationen und des Stils in die entsprechende DateTime. Das Format der Zeichenfolgenentsprechung muss mindestens einem der angegebenen Formate genau entsprechen.
Jürgen
Hallo juetho,
DateTime.ParseExact-Methode (String, String[], IFormatProvider, DateTimeStyles)
Den ersten String habe ich.
Das Array String[] habe ich nicht!
So etwas wie [ "dd.MM.yyyy", "MM/dd/yyyy", usw. ]
habe ich nicht.
Ich weiß nicht, welches Format in der Datenbank stehen wird,
also brauche ich ein Array String[ alle möglichen Datumsformate ].
Es muss kulturunabhänig sein.
Ziel wäre, man nimmt eine String Array aus allen möglichen Datumsformaten der Welt,
sagt per DateTime.ParseExact erstelle mir aus dem String ein gültiges Datum und
Formatiere mir dieses gültige Datum dann mit .ToString( "dd.MM.yyyy" )
Hallo JAck30lena,
Gegeben ist eine Stringwert der einen Datumstempel enthällt.
Dies ist Fakt. Entweder null oder Datum.
Also will ich nicht mit TryParse das Datum überprüfen, sondern ich möchte mir
ParseExact den String wieder in ein DateTime Objekt konvertieren zur Weiterverarbeitung.
Da ich aber nicht weiß, welches weltweite gültige Datumsformat der String ist,
kann ich nicht einfach sagen DateTime.ParseExact 🙁
Meine Idee wäre es durch alle CulturInfo() zu gehen, das jeweilige Format in Sring[] zu speichern und dann zu verwenden.
Frage ist nur, ob es das nicht schon gibt.
using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main( string[] args )
{
string[] dateFormats = new string[ 116 ];
int i = 0;
foreach ( CultureInfo ci in CultureInfo.GetCultures( CultureTypes.InstalledWin32Cultures ) )
{
dateFormats[ i ] = ci.DateTimeFormat.ShortDatePattern;
Console.WriteLine( ci.DateTimeFormat.ShortDatePattern );
i++;
}
}
}
}
ergibt
Hi!
Wäre es nicht sinnvoll an der Wurzel des Übels zu arbeiten, d.h. es zu vermeiden einen Kultur behafteten string in der Datenbank zu speichern (Stichwort invariant culture)?
Gruß, DaMoe
@DaMoe80
dein Wort in Admins Ohr 🙂
Leider habe ich darauf keinen Einfluss.
Ein Multikulti Unternehmen hat halt oft solche schlecht DB Designs 🙁
Vorerst muss ich damit Leben, dass ich eine Menge von Datumsformaten bekomme. Diese dann ordentlich anzuzeigen ist nun eine Herausforderung 🙂
also: wenn du nur bestimmte formate erlaben willst, dann nimm parseexakt (wie der name schon sagt)
wenn du einfach parsen möchtest, dann nimm tryparse und hoffe das er das format erkennt.
edit: meines erachtens solltest du dir folgende schlagwürter nochmal genauer ansehen:
ref/out
arrays in c#
DateTime
Alle möglichen Formate einwandfrei auseinander zu halten ist schon mal nicht möglich, z.B.
en-gb: dd/mm/yyyy
en-us: mm/dd/yyyy
Du kannst zwar jetzt den String parsen (z.B. '01/04/2008'), aber ist das jetzt der 1.April oder der 4. Januar???
Alle möglichen Formate einwandfrei auseinander zu halten ist schon mal nicht möglich, z.B.
en-gb: dd/mm/yyyy
en-us: mm/dd/yyyyDu kannst zwar jetzt den String parsen (z.B. '01/04/2008'), aber ist das jetzt der 1.April oder der 4. Januar???
Super, dieses Zitat hat mir gefehlt, damit werde ich nun Morgen dem Admin seine Argumente um die Ohren hauen.
Es macht einfach keinen Sinn, mehrere Formate in die DB zu speichern.
Ein Format wie z.B.
yyyyMMddHHmmss reicht vollkommen aus.
Dann kann man per CultureInfo dem Client das Richtige Format anzeigen.
Und zwar nach dem Format, das auf dem System installiert ist.
Super danke noch mal