24. Oktober 201015 j 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; } } }
24. Oktober 201015 j 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)
24. Oktober 201015 j 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.
25. Oktober 201015 j 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
25. Oktober 201015 j 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 201015 j von lilith2k3
25. Oktober 201015 j 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.
25. Oktober 201015 j 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]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.