internal override ParseResult <OffsetTime> CalculateValue(PatternFields usedFields, string text) { ParseResult <LocalTime> timeResult = Time.CalculateValue(usedFields & PatternFields.AllTimeFields, text); if (!timeResult.Success) { return(timeResult.ConvertError <OffsetTime>()); } LocalTime date = timeResult.Value; return(ParseResult <OffsetTime> .ForValue(date.WithOffset(Offset))); }
/// <summary> /// Combines the values in a date bucket with the values in a time bucket. /// </summary> /// <remarks> /// This would normally be the <see cref="CalculateValue"/> method, but we want /// to be able to use the same logic when parsing an <see cref="OffsetDateTime"/> /// and <see cref="ZonedDateTime"/>. /// </remarks> internal static ParseResult <LocalDateTime> CombineBuckets( PatternFields usedFields, LocalDatePatternParser.LocalDateParseBucket dateBucket, LocalTimePatternParser.LocalTimeParseBucket timeBucket, string text) { // Handle special case of hour = 24 bool hour24 = false; if (timeBucket.Hours24 == 24) { timeBucket.Hours24 = 0; hour24 = true; } ParseResult <LocalDate> dateResult = dateBucket.CalculateValue(usedFields & PatternFields.AllDateFields, text); if (!dateResult.Success) { return(dateResult.ConvertError <LocalDateTime>()); } ParseResult <LocalTime> timeResult = timeBucket.CalculateValue(usedFields & PatternFields.AllTimeFields, text); if (!timeResult.Success) { return(timeResult.ConvertError <LocalDateTime>()); } LocalDate date = dateResult.Value; LocalTime time = timeResult.Value; if (hour24) { if (time != LocalTime.Midnight) { return(ParseResult <LocalDateTime> .InvalidHour24(text)); } date = date.PlusDays(1); } return(ParseResult <LocalDateTime> .ForValue(date + time)); }