/// <summary>
/// Coerces the <paramref name="utcDateTime"/> according to the min and max
/// allowed values of the <paramref name="calendar"/> parameter.
/// </summary>
/// <returns>The coerced value.</returns>
internal static DateTime CoerceDateTime(DateTime utcDateTime, Windows.Globalization.Calendar calendar)
{
var calendarValue = calendar.GetDateTime().UtcDateTime;
var dateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);
calendar.SetToMin();
calendar.AddDays(1);
var minValue = calendar.GetDateTime().UtcDateTime.AddDays(-1);
calendar.SetToMax();
calendar.AddDays(-1);
var maxValue = calendar.GetDateTime().UtcDateTime.AddDays(1);
calendar.SetDateTime(calendarValue);
if (dateTime < minValue)
{
return(DateTime.SpecifyKind(minValue, utcDateTime.Kind));
}
if (dateTime > maxValue)
{
return(DateTime.SpecifyKind(maxValue, utcDateTime.Kind));
}
return(utcDateTime);
}