示例#1
0
 public OffsetAndRule GetOneYearLocalFromUtc(int year)
 {
     OffsetAndRule? oneYearLocFromUtc = _oneYearLocalFromUtc;
     if (oneYearLocFromUtc == null || oneYearLocFromUtc.Year != year)
     {
         TimeZoneInfo currentYear = GetCurrentOneYearLocal();
         AdjustmentRule? rule = currentYear._adjustmentRules == null ? null : currentYear._adjustmentRules[0];
         oneYearLocFromUtc = new OffsetAndRule(year, currentYear.BaseUtcOffset, rule);
         _oneYearLocalFromUtc = oneYearLocFromUtc;
     }
     return oneYearLocFromUtc;
 }
示例#2
0
        // DateTime.Now fast path that avoids allocating an historically accurate TimeZoneInfo.Local and just creates a 1-year (current year) accurate time zone
        internal static TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out bool isAmbiguousLocalDst)
        {
            bool isDaylightSavings = false;

            isAmbiguousLocalDst = false;
            TimeSpan baseOffset;
            int      timeYear = time.Year;

            OffsetAndRule match = s_cachedData.GetOneYearLocalFromUtc(timeYear);

            baseOffset = match.Offset;

            if (match.Rule != null)
            {
                baseOffset = baseOffset + match.Rule.BaseUtcOffsetDelta;
                if (match.Rule.HasDaylightSaving)
                {
                    isDaylightSavings = GetIsDaylightSavingsFromUtc(time, timeYear, match.Offset, match.Rule, out isAmbiguousLocalDst, Local);
                    baseOffset       += (isDaylightSavings ? match.Rule.DaylightDelta : TimeSpan.Zero /* FUTURE: rule.StandardDelta */);
                }
            }
            return(baseOffset);
        }