From: Miguel de Icaza Date: Fri, 7 Dec 2012 21:59:03 +0000 (-0800) Subject: Merge pull request #487 from mayerwin/patch-1 X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=01ea58cbd474d4a9230acbba5571738896539d42;hp=-c;p=mono.git Merge pull request #487 from mayerwin/patch-1 Update mcs/class/System.Core/System/TimeZoneInfo.cs --- 01ea58cbd474d4a9230acbba5571738896539d42 diff --combined mcs/class/System.Core/System/TimeZoneInfo.cs index af52741bf8d,19423d41990..3bfcd0c204c --- a/mcs/class/System.Core/System/TimeZoneInfo.cs +++ b/mcs/class/System.Core/System/TimeZoneInfo.cs @@@ -246,9 -246,21 +246,21 @@@ namespace Syste } - public static DateTimeOffset ConvertTime (DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone) + public static DateTimeOffset ConvertTime(DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone) { - throw new NotImplementedException (); + if (destinationTimeZone == null) + throw new ArgumentNullException("destinationTimeZone"); + + var utcDateTime = dateTimeOffset.UtcDateTime; + AdjustmentRule rule = GetApplicableRule (utcDateTime); + + if (rule != null && destinationTimeZone.IsDaylightSavingTime(utcDateTime)) { + var offset = destinationTimeZone.BaseUtcOffset + rule.DaylightDelta; + return new DateTimeOffset(DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified) + offset, offset); + } + else { + return new DateTimeOffset(DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified) + destinationTimeZone.BaseUtcOffset, destinationTimeZone.BaseUtcOffset); + } } public static DateTime ConvertTimeBySystemTimeZoneId (DateTime dateTime, string destinationTimeZoneId) @@@ -382,10 -394,7 +394,10 @@@ } #endif #if MONODROID - return ZoneInfoDB.GetTimeZone (id); + var timeZoneInfo = ZoneInfoDB.GetTimeZone (id); + if (timeZoneInfo == null) + throw new TimeZoneNotFoundException (); + return timeZoneInfo; #else // Local requires special logic that already exists in the Local property (bug #326) if (id == "Local")