diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeParser.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeParser.cs index 4a8050bd..8702d5fb 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeParser.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeParser.cs @@ -1,6 +1,9 @@ using System; using System.Linq; using System.Globalization; +using System.Text; +using System.Collections.Generic; +using System.Text.RegularExpressions; namespace Microsoft.Windows.Controls { @@ -52,11 +55,9 @@ namespace Microsoft.Windows.Controls private string ResolveDateTimeString(string dateTime, DateTime currentDate) { - // 1/1/0001 12:00:00 AM - string[] dateParts = new string[3] { currentDate.Month.ToString(), currentDate.Day.ToString(), currentDate.Year.ToString() }; + Dictionary dateParts = GetDateParts(currentDate); string[] timeParts = new string[3] { currentDate.Hour.ToString(), currentDate.Minute.ToString(), currentDate.Second.ToString() }; - string designator = "AM"; - + string designator = ""; string[] dateTimeSeparators = new string[] { ",", " ", "-", DateTimeFormatInfo.DateSeparator, DateTimeFormatInfo.TimeSeparator }; var dateTimeParts = dateTime.Split(dateTimeSeparators, StringSplitOptions.RemoveEmptyEntries).ToList(); @@ -72,14 +73,15 @@ namespace Microsoft.Windows.Controls if (!format.Contains("ddd") && !format.Contains("GMT")) { if (format.Contains("M")) - dateParts[0] = dateTimeParts[i]; + dateParts["Month"] = dateTimeParts[i]; else if (format.Contains("d")) - dateParts[1] = dateTimeParts[i]; + dateParts["Day"] = dateTimeParts[i]; else if (format.Contains("y")) { - dateParts[2] = dateTimeParts[i]; - if (dateParts[2].Length == 2) - dateParts[2] = string.Format("{0}{1}", currentDate.Year / 100, dateParts[2]); + dateParts["Year"] = dateTimeParts[i]; + + if (dateParts["Year"].Length == 2) + dateParts["Year"] = string.Format("{0}{1}", currentDate.Year / 100, dateParts["Year"]); } else if (format.Contains("h") || format.Contains("H")) timeParts[0] = dateTimeParts[i]; @@ -92,12 +94,41 @@ namespace Microsoft.Windows.Controls } } - var date = string.Join(DateTimeFormatInfo.DateSeparator, dateParts); + var date = string.Join(DateTimeFormatInfo.DateSeparator, dateParts.Select(x => x.Value).ToArray()); var time = string.Join(DateTimeFormatInfo.TimeSeparator, timeParts); return String.Format("{0} {1} {2}", date, time, designator); } + private Dictionary GetDateParts(DateTime currentDate) + { + Dictionary dateParts = new Dictionary(); + var dateFormatParts = DateTimeFormatInfo.ShortDatePattern.Split(new string[] { DateTimeFormatInfo.DateSeparator }, StringSplitOptions.RemoveEmptyEntries).ToList(); + dateFormatParts.ForEach(item => + { + string key = string.Empty; + string value = string.Empty; + + if (item.Contains("M")) + { + key = "Month"; + value = currentDate.Month.ToString(); + } + else if (item.Contains("d")) + { + key = "Day"; + value = currentDate.Day.ToString(); + } + else if (item.Contains("y")) + { + key = "Year"; + value = currentDate.Year.ToString(); + } + dateParts.Add(key, value); + }); + return dateParts; + } + #endregion // Methods } }