return DateTimeFormat.TryFormat(GetEquivalentDateTime(), destination, out charsWritten, format, provider);
default:
- charsWritten = 0;
- return false;
+ throw new FormatException(SR.Argument_BadFormatSpecifier);
}
}
if (!DateTimeFormat.IsValidCustomDateFormat(format, throwOnError: false))
{
- charsWritten = 0;
- return false;
+ throw new FormatException(SR.Format(SR.Format_DateTimeOnlyContainsNoneDateParts, format.ToString(), nameof(DateOnly)));
}
return DateTimeFormat.TryFormat(GetEquivalentDateTime(), destination, out charsWritten, format, provider);
"M" "0" month w/o leading zero 2
"MM" "00" month with leading zero 02
"MMM" short month name (abbreviation) Feb
- "MMMM" full month name Febuary
- "MMMM*" full month name Febuary
+ "MMMM" full month name February
+ "MMMM*" full month name February
"y" "0" two digit year (year % 100) w/o leading zero 0
"yy" "00" two digit year (year % 100) with leading zero 00
break;
case '\\':
// Escaped character. Can be used to insert a character into the format string.
- // For exmple, "\d" will insert the character 'd' into the string.
+ // For example, "\d" will insert the character 'd' into the string.
//
// NOTENOTE : we can remove this format character if we enforce the enforced quote
// character rule.
// This format is not supported by DateTimeOffset
throw new FormatException(SR.Format_InvalidString);
}
- // Universal time is always in Greogrian calendar.
+ // Universal time is always in Gregorian calendar.
//
// Change the Calendar to be Gregorian Calendar.
//
/// <remarks>
/// An implementation of this interface should produce the same string of characters as an implementation of <see cref="IFormattable.ToString(string?, IFormatProvider?)"/>
/// on the same type.
+ /// TryFormat should return false only if there is not enough space in the destination buffer. Any other failures should throw an exception.
/// </remarks>
bool TryFormat(Span<char> destination, out int charsWritten, ReadOnlySpan<char> format, IFormatProvider? provider);
}
return DateTimeFormat.TryFormat(ToDateTime(), destination, out charsWritten, format, provider);
default:
- charsWritten = 0;
- return false;
+ throw new FormatException(SR.Argument_BadFormatSpecifier);
}
}
if (!DateTimeFormat.IsValidCustomTimeFormat(format, throwOnError: false))
{
- charsWritten = 0;
- return false;
+ throw new FormatException(SR.Format(SR.Format_DateTimeOnlyContainsNoneDateParts, format.ToString(), nameof(TimeOnly)));
}
return DateTimeFormat.TryFormat(ToDateTime(), destination, out charsWritten, format, provider);
Assert.False(dateOnly.TryFormat(buffer.Slice(0, 3), out charsWritten));
Assert.False(dateOnly.TryFormat(buffer.Slice(0, 3), out charsWritten, "r"));
Assert.False(dateOnly.TryFormat(buffer.Slice(0, 3), out charsWritten, "O"));
+ Assert.Throws<FormatException>(() => {
+ Span<char> buff = stackalloc char[100];
+ dateOnly.TryFormat(buff, out charsWritten, "u");
+ });
+ Assert.Throws<FormatException>(() => {
+ Span<char> buff = stackalloc char[100];
+ dateOnly.TryFormat(buff, out charsWritten, "hh-ss");
+ });
+ Assert.Throws<FormatException>(() => $"{dateOnly:u}");
+ Assert.Throws<FormatException>(() => $"{dateOnly:hh-ss}");
}
}
}
Assert.False(timeOnly.TryFormat(buffer.Slice(0, 3), out charsWritten));
Assert.False(timeOnly.TryFormat(buffer.Slice(0, 3), out charsWritten, "r"));
Assert.False(timeOnly.TryFormat(buffer.Slice(0, 3), out charsWritten, "O"));
+
+ Assert.Throws<FormatException>(() => {
+ Span<char> buff = stackalloc char[100];
+ timeOnly.TryFormat(buff, out charsWritten, "u");
+ });
+ Assert.Throws<FormatException>(() => {
+ Span<char> buff = stackalloc char[100];
+ timeOnly.TryFormat(buff, out charsWritten, "dd-yyyy");
+ });
+ Assert.Throws<FormatException>(() => $"{timeOnly:u}");
+ Assert.Throws<FormatException>(() => $"{timeOnly:dd-yyyy}");
}
}
}