/// <summary>
/// Determines if the specified <paramref name="year"/> is a valid year value.
/// </summary>
/// <param name="year">The year value.</param>
/// <param name="cal">The calendar to use.</param>
/// <param name="era">The era the year belongs to.</param>
/// <returns>true if it's a valid year value; false otherwise.</returns>
private static bool IsValidYear(int year, Calendar cal, int era)
{
int minYear = cal.GetYear(cal.MinSupportedDateTime.Date);
int maxYear = cal.GetYear(cal.MaxSupportedDateTime.Date);
if (cal.Eras.Length > 1)
{
DateTime? minDate = null, maxDate = null;
DateTime date = cal.MinSupportedDateTime;
while (date < cal.MaxSupportedDateTime.Date)
{
int e = cal.GetEra(date);
if (e == era)
{
if (minDate == null)
{
minDate = date;
}
maxDate = date;
}
date = cal.AddDays(date, 1);
}
minYear = cal.GetYear(minDate.GetValueOrDefault(cal.MinSupportedDateTime.Date));
maxYear = cal.GetYear(maxDate.GetValueOrDefault(cal.MaxSupportedDateTime.Date));
}
year = cal.ToFourDigitYear(year);
return year >= minYear && year <= maxYear;
}