2009-06-25 16 views
0

Ich habe eine Situation, in der ich Textdaten in Datum konvertieren muss.Umwandlung von Textdaten in Datum

Ich habe den folgenden Code verwendet, um dies zu tun!


 string s = textBox1.Text; 
     if (String.IsNullOrEmpty(s)) 
     { 
      textBox2.Text = "Please enter any date."; 

     } 
     else 
     { 
      DateTime dt = DateTime.Parse(s); 
      string day = dt.Day.ToString(); 
      string month = dt.Month.ToString(); 
      string year = dt.Year.ToString(); 
      s = day + "/" + month + "/" + year; 
      textBox2.Text = s; 
     } 

Dies wird nur die folgenden Formate von Daten ändern.


10/10/09 oder 10.10.2009 ---- umgewandelt Datum ------ 10/10/2009

12/13/2009 oder 12/13/9 ---- umgerechnetes Datum ------- 12/13/2009

10/16 ---- umgerechnetes Datum ------------------- ---- 16/10/2009

2009/12/10 ---- umgerechnetes Datum ------------------ 10/12/2009


Die folgenden Formate sind nicht auf TT/MM/yyyy


16/10-tt/mm

060.209 oder 06.022.009 ddmmyyyy

13.122.009 mmddyyyy

20.091.213 yyyymmdd

geändert zu werden

20091312 yyyyddmm

20.07.2009/20.07.2009/20-07-2009/20-07-09


Kann mir jemand dabei helfen. Ich bin sehr neu in C#

+0

Sie das nicht bestimmen kann, Unterschied zwischen yyyymmdd und yyyyddmm oder ddmmyyyy und mmddyyyy z 20010102 ist mehrdeutig, ebenso wie 01022001. –

Antwort

0

Vielen Dank für die Unterstützung und Anleitung, die Sie gegeben haben. Ich habe die Lösung für meine Abfrage gefunden

Ein neues Textfeld wird explizit erstellt und mithilfe der ParseExact-Funktion wird der DateTime-Wert konvertiert.

Unten ist die Form, die verwendet wurde. alt text http://img146.imageshack.us/img146/2107/form.jpg

Der Kodex wird unter


private void button1_Click(object sender, EventArgs e) 

     { 
     string s = textBox1.Text;   
     string DFF = textBox3.Text;   

     //To check whether field is empty 

     if (String.IsNullOrEmpty(s)) 
     { 
      MessageBox.Show("Please enter correct date"); 
      textBox2.Text = "Enter correct date"; 
     }   
     else 
     { 
      DateTime dt = DateTime.ParseExact(s, DFF, null); 
      textBox2.Text = dt.ToShortDateString(); 
     } 

    } 
geschrieben

Dieser Code wird ausgegeben für alle Terminarten geben:

TT.MM.JJJJ oder dd-mm-yyyy oder dd \ mm \ yyyy

mm.dd.yyyy oder mm-dd-yyyy oder mm \ dd \ yyyy

yyyy.mm.dd oder yyyy-mm-dd oder yyyy \ mm \ dd

yyyy.dd.mm oder jjjj-dd-mm oder yyyy-mm-dd

ddmmyy oder mmddyy oder yyddmm

dd \ mm oder mm \ dd oder dd.mm oder MM.DD

1

Parsing Daten ist ein bisschen komplizierter als das, ich habe Angst. Es hängt von Ihren Kultur/Ländereinstellungen ab. Schauen Sie sich die Überlastungen für DateTime.Parse ...

Beachten Sie auch, dass bei der Ausgabe Ihrer Datum, Sie könnten/auch String.Format, wie so verwenden sollten:

String.Format("{0:dd/MM/yyyy}", dt) 
0

Erstens wäre es wahrscheinlich, wenn Sie mehr elegant sollten die Methode DateTime.ToString mit einer Formatzeichenfolge verwenden, die das Formular angibt, in dem die Datumszeichenfolge angezeigt werden soll (Informationen hierzu finden Sie unter here).

Was, warum die anderen Formate, die Sie nicht richtig in einem DateTime Objekt analysiert angegeben werden, müssen Sie wahrscheinlich die DateTime.Parse(string, IFormatProvider) Variante verwenden und deine eigenen IFormatProvider für diese definieren. Möglicherweise finden Sie diese MSDN article könnte dafür nützlich sein.

0

Sie müssen Ihr eigenes Parsing für alle nicht standardmäßigen Formate schreiben. Auch Formate wie "yyyymmdd" und "yyyyddmm" werden problematisch sein, da Sie Benutzer benötigen, um anzugeben, was das Eingabeformat ist, oder Sie werden in einigen Fällen nur falsch konvertieren.

Für den Rest werfen Sie einen Blick auf DateTime.Parse (auch von Benjol erwähnt) sollte es Ihr Problem für gängige Formate auf der ganzen Welt zu lösen.

0

Sie können DateTime.ParseExact verwenden

Zum Beispiel:

DateTime.ParseExact("20090823", "yyyyMMdd", null);  
DateTime.ParseExact("16/10", "dd/MM", null); 

Edit: Verwenden DateTime.TryParse (oder DateTime.TryParseExact) das Datum eingegeben zu validieren.

DateTime date; 
string error = ""; 
if (!DateTime.TryParse("12978434", out date)) 
{ 
    error = "Invalid date"; 
} 
+0

Dies funktioniert nicht. Ich denke, Sie müssen einen geeigneten IFormatProvider oder ICultureInfo angeben. – jpoh

+0

Ich hatte das mit Null auf meinem Rechner arbeiten. Ich denke, ich werde mehr Nachforschungen anstellen. – Castrohenge

0

DateTime.Parse kann nicht alle von Ihnen angegebenen Kombinationen analysieren. Ich würde vorschlagen, dass Sie zuerst DateTime.TryParse ausprobieren, um zu sehen, ob das Eingabedatum analysierbar ist. Wenn dies false zurückgibt, verwenden Sie ParseExact (oder besser: TryParseExact), um das erwartete Datumsformat zu überprüfen.

Leider glaube ich nicht, dass es eine Einheitslösung für dieses Problem gibt.

0

Ist es möglich, dass Sie ein 'DatePicker'/Kalender-Steuerelement anstelle eines TextBox verwenden?

zB AJAX Toolkit Calendar control

Dies würde die Notwendigkeit entfernen Sie alle möglichen Datumsformat ein Benutzer angeben könnte möglicherweise haben zu behandeln. Es bietet auch eine schönere Benutzererfahrung IMHO.

Update nach OP Kommentar:

Wie andere Plakate vorgeschlagen haben, würde ich DateTime.TryParse als ersten Durchgang verwenden, Datumszeichenketten in einem der unterstützten Standardformate zu verarbeiten. Dann müssten Sie auf DateTime.ParseExact für jedes unterstützte nicht standardmäßige Format zurückgreifen. Schließlich denke ich, dass Sie einen Fehler für alle nicht-Datum-Strings oder unsupported Datumsformate kennzeichnen müssen.

+0

Ich stimme zu, aber kann ich wollen, dass dieser Code als Teil der Validierung Textdaten aus der Textdatei auswählen und überprüfen. –

+0

Ok ich sehe, ich dachte, ich würde prüfen, ob du mit einem einfacheren Ansatz davonkommen könntest :-) –