/// <returns>"true" if successfully parsed.</returns>
public static bool TryParseAsISO(ReadOnlySpan<byte> source, out DateTime value)
{
- DateTimeParseData parseData = new DateTimeParseData();
-
- if (!TryParseDateTimeOffset(source, ref parseData))
+ if (!TryParseDateTimeOffset(source, out DateTimeParseData parseData))
{
value = default;
return false;
if (parseData.OffsetToken == JsonConstants.UtcOffsetToken)
{
- return TryCreateDateTime(ref parseData, DateTimeKind.Utc, out value);
+ return TryCreateDateTime(parseData, DateTimeKind.Utc, out value);
}
else if (parseData.OffsetToken == JsonConstants.Plus || parseData.OffsetToken == JsonConstants.Hyphen)
{
return true;
}
- return TryCreateDateTime(ref parseData, DateTimeKind.Unspecified, out value);
+ return TryCreateDateTime(parseData, DateTimeKind.Unspecified, out value);
}
/// <summary>
/// <returns>"true" if successfully parsed.</returns>
public static bool TryParseAsISO(ReadOnlySpan<byte> source, out DateTimeOffset value)
{
- DateTimeParseData parseData = new DateTimeParseData();
-
- if (!TryParseDateTimeOffset(source, ref parseData))
+ if (!TryParseDateTimeOffset(source, out DateTimeParseData parseData))
{
value = default;
return false;
}
// No offset, attempt to read as local time.
- return TryCreateDateTimeOffsetInterpretingDataAsLocalTime(ref parseData, out value);
+ return TryCreateDateTimeOffsetInterpretingDataAsLocalTime(parseData, out value);
}
/// <summary>
/// Spaces are not permitted.
/// </remarks>
/// <returns>"true" if successfully parsed.</returns>
- private static bool TryParseDateTimeOffset(ReadOnlySpan<byte> source, ref DateTimeParseData parseData)
+ private static bool TryParseDateTimeOffset(ReadOnlySpan<byte> source, out DateTimeParseData parseData)
{
// Source does not have enough characters for YYYY-MM-DD
if (source.Length < 10)
{
+ parseData = default;
return false;
}
// just [year][“-”][month] (a) and just [year] (b), but we currently
// don't permit it.
+ parseData = new DateTimeParseData();
+
{
uint digit1 = source[0] - (uint)'0';
uint digit2 = source[1] - (uint)'0';
/// </summary>
private static bool TryCreateDateTimeOffset(ref DateTimeParseData parseData, out DateTimeOffset value)
{
- if (!TryCreateDateTime(ref parseData, kind: DateTimeKind.Unspecified, out DateTime dateTime))
+ if (!TryCreateDateTime(parseData, kind: DateTimeKind.Unspecified, out DateTime dateTime))
{
value = default;
return false;
/// <summary>
/// Overflow-safe DateTimeOffset/Local time conversion factory.
/// </summary>
- private static bool TryCreateDateTimeOffsetInterpretingDataAsLocalTime(ref DateTimeParseData parseData, out DateTimeOffset value)
+ private static bool TryCreateDateTimeOffsetInterpretingDataAsLocalTime(DateTimeParseData parseData, out DateTimeOffset value)
{
- if (!TryCreateDateTime(ref parseData, DateTimeKind.Local, out DateTime dateTime))
+ if (!TryCreateDateTime(parseData, DateTimeKind.Local, out DateTime dateTime))
{
value = default;
return false;
/// <summary>
/// Overflow-safe DateTime factory.
/// </summary>
- private static bool TryCreateDateTime(ref DateTimeParseData parseData, DateTimeKind kind, out DateTime value)
+ private static bool TryCreateDateTime(DateTimeParseData parseData, DateTimeKind kind, out DateTime value)
{
if (parseData.Year == 0)
{