提交 b4408f1a 编写于 作者: M Maxim Lipnin 提交者: cprasad-rythmos

Avoid creating un-representable DateTime for transition point (#16753)

Fixes https://github.com/mono/mono/issues/16742
上级 9b40003e
......@@ -1287,8 +1287,11 @@ namespace System
private static DateTime TransitionPoint (TransitionTime transition, int year)
{
if (transition.IsFixedDateRule)
return new DateTime (year, transition.Month, transition.Day) + transition.TimeOfDay.TimeOfDay;
if (transition.IsFixedDateRule) {
var daysInMonth = DateTime.DaysInMonth (year, transition.Month);
var transitionDay = transition.Day <= daysInMonth ? transition.Day : daysInMonth;
return new DateTime (year, transition.Month, transitionDay) + transition.TimeOfDay.TimeOfDay;
}
DayOfWeek first = (new DateTime (year, transition.Month, 1)).DayOfWeek;
int day = 1 + (transition.Week - 1) * 7 + (transition.DayOfWeek - first + 7) % 7;
......
......@@ -854,6 +854,15 @@ namespace MonoTests.System
Assert.IsTrue (tzi.IsDaylightSavingTime (dateOffset));
}
// https://github.com/mono/mono/issues/16742
[Test]
public void Bug_16472 ()
{
var parsedTime = DateTime.Parse ("1948-02-19T23:00:00Z", CultureInfo.InvariantCulture);
var newTime = TimeZoneInfo.ConvertTime (parsedTime, TimeZoneInfo.FindSystemTimeZoneById (MapTimeZoneId ("Europe/Rome")));
Assert.AreEqual (1948, newTime.Year);
}
// https://github.com/mono/mono/issues/9664
[Test]
public void Bug_9664 ()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册