matze2k2 Geschrieben 24. Oktober 2010 Geschrieben 24. Oktober 2010 Hallo zusammen, ich habe mir eine Klasse geschrieben, welche mir aus einem String das Datum zurückgibt. Ich gebe bspw. '01' ein und es gibt mir das aktuelle Tagesdatum zurück. '0101' gibt mir '01.01.2010' zurück. Wie auch immer. Ich möchte nun noch 2 Verbesserungen einbauen (bisher): - Anstelle des fest einprogrammierten Punktes möchte ich den Date-Separator aus Windows auslesen und einfügen. - Ich möchte variable auf die US-Darstellung reagieren können. Sprich wenn dort MM/DD/YYYY eingestellt ist, möchte ich das natürlich auch so einstellen. Weiß jmd. woher ich die Informationen bekomme? Unten der Code... Gruß Mathias using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace MDIChild2 { class ConvertDate { public static string convertDateString(String date) { string month = DateTime.Now.Month.ToString(); string year = DateTime.Now.Year.ToString(); string partYear; if (date.Length > 12) { MessageBox.Show("String too long for a date."); return date; } date = date.Replace(".", ""); date = date.Replace("/", ""); int length = date.Length - 1; if (IsNumeric(date)) { if (date.Length <= 2) { return date.Substring(0, date.Length).PadLeft(2, '0') + "." + month + "." + year; } if (date.Length <= 4) { return date.Substring(0, 2) + "." + date.Substring(2, date.Length-2).PadLeft(2, '0') + "." + year; } if (date.Length <= 8) { if (date.Substring(4, date.Length - 4).Length == 4) { return date.Substring(0, 2) + "." + date.Substring(2, 2) + "." + date.Substring(4, date.Length - 4); } else { partYear = year.Substring(0, (4 - date.Substring(4, date.Length - 4).Length)) + date.Substring(4, date.Length - 4); return date.Substring(0, 2) + "." + date.Substring(2, 2) + "." + partYear; } } } return date; } public static bool IsNumeric(object numberString) { char[] ca = numberString.ToString().ToCharArray(); for (int i = 0; i < ca.Length; i++) { if (!char.IsNumber(ca[i])) if (ca[i] != '.') return false; } if (numberString.ToString().Trim() == "") return false; return true; } } } Zitieren
lilith2k3 Geschrieben 24. Oktober 2010 Geschrieben 24. Oktober 2010 Ich hab jetzt zwar nicht ganz genau verstanden, was Du vorhast, aber warum benutzt Du nicht die Funktionen von DateTime, die es schon gibt? Also e.g. DateTime.Parse(), wo man aus einem String ein Datum bauen kann? DateTime.Parse Method (String) (System) Zitieren
matze2k2 Geschrieben 24. Oktober 2010 Autor Geschrieben 24. Oktober 2010 Nein mir ging es darum meine Datumsfelder benutzerfreundlicher zu gestalten. Sprich wenn ein Benutzer nur 01 eingibt, dann wird ihm daraus automatisch der erste des aktuellen Monats zurück gegeben, 0101 der 1 Januar des aktuellen Jahrs und 010110 der 1 Januar 2010. Und ich denke das ist ne super Sache und wüsste nicht, dass es da etwas von c# gibt. Zitieren
kevinka Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 Hi Matze, du musst mal unter: System.Globalization nachschauen. Da gibts sogar ne Funktion: DateTimeFormatInfo.CurrentInfo() --> du liest das aktuell eingestellt datumsformat (des landes) aus (system). mfg kevin Zitieren
lilith2k3 Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 (bearbeitet) class Program { static void Main(string[] args) { DateTime datum; string eingabeDatum=Console.ReadLine(); switch (eingabeDatum) { case "01": datum=new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); break; case "0101": datum=new DateTime(DateTime.Now.Year, 1, 1); break; default: DateTime.TryParse(eingabeDatum, out datum); break; } Console.WriteLine(datum); Console.ReadKey(); } }[/PHP] Wie wäre es damit: 01 ergibt das Datum des Monatsersten 0101 ergibt das Datum des Jahresersten und für den Rest kann der Benutzer auch gleich einen Datumsstring eingeben (die zwei Punkte ersparen dem Benutzer nun wirklich nix) ? Bearbeitet 25. Oktober 2010 von lilith2k3 Zitieren
matze2k2 Geschrieben 25. Oktober 2010 Autor Geschrieben 25. Oktober 2010 Hi kevinka, vielen Dank für den Tipp, werde ich später einmal ausprobieren. @lilith2k3: 01 und 0101 waren nur ein Beispiel. Wenn ich 25 eingebe erhalte ich aktuell den 15.10.2010 und wenn ich 1509 eingebe 15.09.2010. Wenn ich 150211 eingebe....... 15.02.2011. Zitieren
lilith2k3 Geschrieben 25. Oktober 2010 Geschrieben 25. Oktober 2010 Wo ist das Problem? Dann musst Du lediglich den switch-Teil umschreiben ...?! switch (eingabeDatum.Length) { case 2: int day; if (int.TryParse(eingabeDatum, out day)==false) day=1; datum=new DateTime(DateTime.Now.Year, DateTime.Now.Month, day); break; case 4: int day2; int month; if (int.TryParse(eingabeDatum.Substring(0,2), out day2)==false) day2=1; if(int.TryParse(eingabeDatum.Substring(2, 2), out month)==false) month =1; datum=new DateTime(DateTime.Now.Year, month, day2); break; default: DateTime.TryParse(eingabeDatum, out datum); break; }[/PHP] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.