internal override ParseResult <LocalDate> CalculateValue(PatternFields usedFields, string text) { // This will set Year if necessary ParseResult <LocalDate> failure = DetermineYear(usedFields, text); if (failure != null) { return(failure); } // This will set MonthOfYearNumeric if necessary failure = DetermineMonth(usedFields, text); if (failure != null) { return(failure); } int day = IsFieldUsed(usedFields, PatternFields.DayOfMonth) ? DayOfMonth : templateValue.Day; if (day > Calendar.GetDaysInMonth(Year, MonthOfYearNumeric)) { return(ParseResult <LocalDate> .DayOfMonthOutOfRange(text, day, MonthOfYearNumeric, Year)); } LocalDate value = new LocalDate(Year, MonthOfYearNumeric, day, Calendar); if (IsFieldUsed(usedFields, PatternFields.DayOfWeek) && DayOfWeek != value.DayOfWeek) { return(ParseResult <LocalDate> .InconsistentDayOfWeekTextValue(text)); } // FIXME: If we got an era, check that the resulting date really lies within that era. return(ParseResult <LocalDate> .ForValue(value)); }
internal override ParseResult <LocalDate> CalculateValue(PatternFields usedFields, string text) { if (usedFields.HasAny(PatternFields.EmbeddedDate)) { return(ParseResult <LocalDate> .ForValue(new LocalDate(Year, MonthOfYearNumeric, DayOfMonth, Calendar))); } // This will set Year if necessary ParseResult <LocalDate> failure = DetermineYear(usedFields, text); if (failure != null) { return(failure); } // This will set MonthOfYearNumeric if necessary failure = DetermineMonth(usedFields, text); if (failure != null) { return(failure); } int day = usedFields.HasAny(PatternFields.DayOfMonth) ? DayOfMonth : TemplateValue.Day; if (day > Calendar.GetDaysInMonth(Year, MonthOfYearNumeric)) { return(ParseResult <LocalDate> .DayOfMonthOutOfRange(text, day, MonthOfYearNumeric, Year)); } LocalDate value = new LocalDate(Year, MonthOfYearNumeric, day, Calendar); if (usedFields.HasAny(PatternFields.DayOfWeek) && DayOfWeek != (int)value.DayOfWeek) { return(ParseResult <LocalDate> .InconsistentDayOfWeekTextValue(text)); } return(ParseResult <LocalDate> .ForValue(value)); }