public virtual void ShouldParseTextToDateTime() { // culture is internal, need to test with a known culture. CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); OverriddenTimeGlobalizationInfo strategy = new OverriddenTimeGlobalizationInfo(); Assert.IsTrue(strategy.ActualCulture.Name == "en-US", "This test should run under en-US culture, setting did not work as expected."); TimeParserCollection parsers = new TimeParserCollection { new CustomTimeParser() }; Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30), strategy.ParseTime("8:30 AM", new ShortTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(20).AddMinutes(30), strategy.ParseTime("8:30 PM", new ShortTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30).AddSeconds(12), strategy.ParseTime("8:30:12 AM", new LongTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(20).AddMinutes(30).AddSeconds(12), strategy.ParseTime("8:30:12 PM", new LongTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30).AddSeconds(12), strategy.ParseTime("08:30:12", new CustomTimeFormat("hh:mm:ss"), parsers)); Assert.AreEqual(DateTime.MinValue.Date.AddHours(15).AddMinutes(40), strategy.ParseTime("3 uur 40", new CustomTimeFormat("hh:mm:ss"), parsers)); } finally { Thread.CurrentThread.CurrentCulture = currentCulture; } }
/// <summary> /// Parses a string into a DateTime using the specified ITimeFormat instance /// and TimeParsers and returns a value that indicates whether the conversion /// succeeded. /// </summary> /// <param name="mappedText">The text that was entered by the user.</param> /// <param name="timeFormat">The TimeFormat instance used to supply /// formats.</param> /// <param name="timeParsers">The time parsers.</param> /// <param name="result">A DateTime with a correctly set time part.</param> /// <returns> /// True, if the time was parsed correctly, false if the time was not /// parsed. /// </returns> /// <remarks>The date part of the DateTime is irrelevant and will be /// overwritten by the current date. /// </remarks> public bool TryParseTime(string mappedText, ITimeFormat timeFormat, IEnumerable<TimeParser> timeParsers, out DateTime? result) { result = null; if (string.IsNullOrEmpty(mappedText)) { return true; } string value = new string(mappedText.ToCharArray().Select(c => TimeSeparators.Contains(c) ? c : MapCharacterToDigit(c)).ToArray()); if (timeFormat != null) { DateTime realResult; // try using formats. if (DateTime.TryParseExact( value, timeFormat.GetTimeParseFormats(ActualCulture).Select(s => GetTransformedFormat(s)).ToArray(), ActualCulture, DateTimeStyles.None, out realResult)) { result = realResult; return true; } } // try using custom collection of parsers. TimeParserCollection timeParserCollection = new TimeParserCollection(GetActualTimeParsers(timeParsers)); DateTime? parsedResult; if (timeParserCollection.TryParse(mappedText, ActualCulture, out parsedResult)) { result = parsedResult; return true; } return false; }
public virtual void ShouldBindParsersToTimeUpDown() { TimePicker tip = new TimePicker(); TimeUpDown tud = null; TimeParserCollection parsers = new TimeParserCollection(); parsers.Add(new CustomTimeParser()); TestAsync( tip, () => tud = ((Panel)VisualTreeHelper.GetChild(tip, 0)).FindName("TimeUpDown") as TimeUpDown, () => tip.TimeParsers = parsers, () => Assert.AreEqual(tip.TimeParsers, tud.TimeParsers)); }
public virtual void ShouldParseTextToDateTime() { // culture is internal, need to test with a known culture. CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; try { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); OverriddenTimeGlobalizationInfo strategy = new OverriddenTimeGlobalizationInfo(); Assert.IsTrue(strategy.ActualCulture.Name == "en-US", "This test should run under en-US culture, setting did not work as expected."); TimeParserCollection parsers = new TimeParserCollection { new CustomTimeParser() }; Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30), strategy.ParseTime("8:30 AM", new ShortTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(20).AddMinutes(30), strategy.ParseTime("8:30 PM", new ShortTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30).AddSeconds(12), strategy.ParseTime("8:30:12 AM", new LongTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(20).AddMinutes(30).AddSeconds(12), strategy.ParseTime("8:30:12 PM", new LongTimeFormat(), parsers)); Assert.AreEqual(DateTime.Today.Date.AddHours(8).AddMinutes(30).AddSeconds(12), strategy.ParseTime("08:30:12", new CustomTimeFormat("hh:mm:ss"), parsers)); Assert.AreEqual(DateTime.MinValue.Date.AddHours(15).AddMinutes(40), strategy.ParseTime("3 uur 40", new CustomTimeFormat("hh:mm:ss"), parsers)); } finally { Thread.CurrentThread.CurrentCulture = currentCulture; } }