Browse Source

DateTime controls: improved the date time parsing to better support different cultures.

pull/1645/head
brianlagunas_cp 15 years ago
parent
commit
4beca7ad28
  1. 51
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/DateTimeUpDown/Implementation/DateTimeParser.cs

51
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<string, string> 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<string, string> GetDateParts(DateTime currentDate)
{
Dictionary<string, string> dateParts = new Dictionary<string, string>();
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
}
}

Loading…
Cancel
Save