public static void OAndRFormatsTest() { TimeOnly timeOnly = TimeOnly.FromDateTime(DateTime.Now); string formattedDate = timeOnly.ToString("o"); Assert.Equal(16, formattedDate.Length); Assert.Equal(':', formattedDate[2]); Assert.Equal(':', formattedDate[5]); Assert.Equal('.', formattedDate[8]); TimeOnly parsedTimeOnly = TimeOnly.Parse(formattedDate); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.Parse(formattedDate.AsSpan()); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.ParseExact(formattedDate, "O"); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.ParseExact(formattedDate.AsSpan(), "O".AsSpan()); Assert.Equal(timeOnly, parsedTimeOnly); timeOnly = new TimeOnly(timeOnly.Hour, timeOnly.Minute, timeOnly.Second); formattedDate = timeOnly.ToString("r"); Assert.Equal(8, formattedDate.Length); Assert.Equal(':', formattedDate[2]); Assert.Equal(':', formattedDate[5]); parsedTimeOnly = TimeOnly.Parse(formattedDate); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.Parse(formattedDate.AsSpan()); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.ParseExact(formattedDate, "R"); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.ParseExact(formattedDate.AsSpan(), "R".AsSpan()); Assert.Equal(timeOnly, parsedTimeOnly); }
public override TimeOnly?ReadJson(JsonReader reader, Type objectType, TimeOnly?existingValue, bool hasExistingValue, JsonSerializer serializer) { if (reader.Value is null) { return(null); } return(TimeOnly.ParseExact(reader.Value as string ?? string.Empty, TimeFormat, CultureInfo.InvariantCulture)); }
/// <summary> /// Converts the string to an object. /// </summary> /// <param name="text">The string to convert to an object.</param> /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param> /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param> /// <returns>The object created from the string.</returns> public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData) { if (text == null) { return(base.ConvertFromString(null, row, memberMapData)); } var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo; var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None; return(memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0 ? TimeOnly.Parse(text, formatProvider, dateTimeStyle) : TimeOnly.ParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle)); }
public static void CustomFormattingTest() { TimeOnly timeOnly = TimeOnly.FromDateTime(DateTime.Now); string format = "HH 'dash' mm \"dash\" ss'....'fffffff"; string formatted = timeOnly.ToString(format); TimeOnly parsedTimeOnly = TimeOnly.ParseExact(formatted, format); Assert.Equal(timeOnly, parsedTimeOnly); parsedTimeOnly = TimeOnly.ParseExact(formatted.AsSpan(), format.AsSpan()); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Throws <FormatException>(() => timeOnly.ToString("hh:mm:ss dd")); Assert.Throws <FormatException>(() => timeOnly.ToString("hh:mm:ss MM")); Assert.Throws <FormatException>(() => timeOnly.ToString("hh:mm:ss yy")); }
public static void AllCulturesTest() { TimeOnly timeOnly = new TimeOnly((DateTime.Now.TimeOfDay.Ticks / TimeSpan.TicksPerMinute) * TimeSpan.TicksPerMinute); foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { if (string.IsNullOrEmpty(ci.DateTimeFormat.TimeSeparator)) { // cannot parse concatenated time part numbers. continue; } string formatted = timeOnly.ToString("t", ci); TimeOnly parsedTimeOnly = TimeOnly.ParseExact(formatted, "t", ci); Assert.Equal(timeOnly.Hour % 12, parsedTimeOnly.Hour % 12); Assert.Equal(timeOnly.Minute, parsedTimeOnly.Minute); formatted = timeOnly.ToString("T", ci); parsedTimeOnly = TimeOnly.ParseExact(formatted, "T", ci); Assert.Equal(timeOnly.Hour % 12, parsedTimeOnly.Hour % 12); Assert.Equal(timeOnly.Minute, parsedTimeOnly.Minute); } }
public static void FormatParseTest() { string[] patterns = new string[] { CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern, CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern, "t", "T", "o", "r" }; TimeOnly timeOnly = TimeOnly.FromDateTime(DateTime.Now); foreach (string format in patterns) { string formattedTime = timeOnly.ToString(format); timeOnly = TimeOnly.Parse(formattedTime); Assert.True(TimeOnly.TryParse(formattedTime, out TimeOnly parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly1); TimeOnly parsedTimeOnly = TimeOnly.Parse(formattedTime.AsSpan()); Assert.True(TimeOnly.TryParse(formattedTime.AsSpan(), out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.Parse(formattedTime, CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParse(formattedTime, CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.Parse(formattedTime.AsSpan(), CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParse(formattedTime.AsSpan(), CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime, format); Assert.True(TimeOnly.TryParseExact(formattedTime, format, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime.AsSpan(), format.AsSpan()); Assert.True(TimeOnly.TryParseExact(formattedTime.AsSpan(), format.AsSpan(), out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime, format, CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParseExact(formattedTime, format, CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime.AsSpan(), format.AsSpan(), CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParseExact(formattedTime.AsSpan(), format.AsSpan(), CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime, patterns); Assert.True(TimeOnly.TryParseExact(formattedTime, patterns, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime.AsSpan(), patterns); Assert.True(TimeOnly.TryParseExact(formattedTime.AsSpan(), patterns, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime, patterns, CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParseExact(formattedTime, patterns, CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); parsedTimeOnly = TimeOnly.ParseExact(formattedTime.AsSpan(), patterns, CultureInfo.CurrentCulture); Assert.True(TimeOnly.TryParseExact(formattedTime.AsSpan(), patterns, CultureInfo.CurrentCulture, DateTimeStyles.None, out parsedTimeOnly1)); Assert.Equal(timeOnly, parsedTimeOnly); Assert.Equal(timeOnly, parsedTimeOnly1); } }
public override TimeOnly? ReadJson(JsonReader reader, Type objectType, TimeOnly? existingValue, bool hasExistingValue, JsonSerializer serializer) { return TimeOnly.ParseExact((string)reader.Value, TimeFormat, CultureInfo.InvariantCulture); }