Прочитать на английском

Поделиться через


TimeZoneInfo.AdjustmentRule.DateEnd Свойство

Определение

Возвращает дату, когда правило коррекции перестает быть действительным.

C#
public DateTime DateEnd { get; }

Значение свойства

Значение DateTime, указывающее конечную дату правила коррекции.

Примеры

В следующем примере отображаются сведения обо всех часовых поясах, определенных в системном реестре локального компьютера, включая начальную и конечную даты правил корректировки.

C#
using System;
using System.Collections.ObjectModel;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
      DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
      
      foreach (var zone in timeZones)
      {
         Console.WriteLine("{0} transition time information:", zone.StandardName);
         Console.WriteLine("   Time zone information: ");
         Console.WriteLine("      Base UTC Offset: {0}", zone.BaseUtcOffset);
         Console.WriteLine("      Supports DST: {0}", zone.SupportsDaylightSavingTime);

         TimeZoneInfo.AdjustmentRule[] adjustmentRules= zone.GetAdjustmentRules();
         
         // Indicate that time zone has no adjustment rules
         if (adjustmentRules.Length == 0) {
            Console.WriteLine("      No adjustment rules defined.");
         }   
         else {
            Console.WriteLine("      Adjustment Rules: {0}", adjustmentRules.Length);
            // Iterate adjustment rules       
            foreach (var adjustmentRule in adjustmentRules) {
               Console.WriteLine("   Adjustment rule from {0:d} to {1:d}:", 
                                 adjustmentRule.DateStart, 
                                 adjustmentRule.DateEnd);                                 
               Console.WriteLine("      Delta: {0}", adjustmentRule.DaylightDelta);
               // Get start of transition
               TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
               // Display information on floating date rule
               if (!daylightStart.IsFixedDateRule)
                  Console.WriteLine("      Begins at {0:t} on the {1} {2} of {3}", 
                                 daylightStart.TimeOfDay, 
                                 (WeekOfMonth) daylightStart.Week,  
                                 daylightStart.DayOfWeek, 
                                 dateInfo.GetMonthName(daylightStart.Month));
               // Display information on fixed date rule 
               else
                  Console.WriteLine("      Begins at {0:t} on {1} {2}", 
                                    daylightStart.TimeOfDay, 
                                    dateInfo.GetMonthName(daylightStart.Month), 
                                    daylightStart.Day);
               
               // Get end of transition.
              TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
               // Display information on floating date rule.
               if (!daylightEnd.IsFixedDateRule) 
                  Console.WriteLine("      Ends at {0:t} on the {1} {2} of {3}", 
                                 daylightEnd.TimeOfDay, 
                                 (WeekOfMonth) daylightEnd.Week,  
                                 daylightEnd.DayOfWeek, 
                                 dateInfo.GetMonthName(daylightEnd.Month));
               // Display information on fixed date rule.
               else
                  Console.WriteLine("      Ends at {0:t} on {1} {2}", 
                                    daylightEnd.TimeOfDay, 
                                    dateInfo.GetMonthName(daylightEnd.Month), 
                                    daylightEnd.Day);
            }
         }   
      }   
   }

   private enum WeekOfMonth 
   {
      First = 1,
      Second = 2,
      Third = 3,
      Fourth = 4,
      Last = 5,
   }
}
// A portion of the output from the example might appear as follows:
//       Tonga Standard Time transition time information:
//          Time zone information:
//             Base UTC Offset: 13:00:00
//             Supports DST: False
//             No adjustment rules defined.
//       Samoa Standard Time transition time information:
//          Time zone information:
//             Base UTC Offset: 13:00:00
//             Supports DST: True
//             Adjustment Rules: 4
//          Adjustment rule from 1/1/0001 to 12/31/2009:
//             Delta: 00:00:00
//             Begins at 12:00 AM on January 1
//             Ends at 12:00 AM on January 1
//          Adjustment rule from 1/1/2010 to 12/31/2010:
//             Delta: 01:00:00
//             Begins at 11:59 PM on the Last Saturday of September
//             Ends at 12:00 AM on the First Friday of January
//          Adjustment rule from 1/1/2011 to 12/31/2011:
//             Delta: 01:00:00
//             Begins at 3:00 AM on the Fourth Saturday of September
//             Ends at 4:00 AM on the First Saturday of April
//          Adjustment rule from 1/1/2012 to 12/31/9999:
//             Delta: 01:00:00
//             Begins at 12:00 AM on the Last Sunday of September
//             Ends at 1:00 AM on the First Sunday of April
//       Line Islands Standard Time transition time information:
//          Time zone information:
//             Base UTC Offset: 14:00:00
//             Supports DST: False
//             No adjustment rules defined.

Комментарии

Значение DateEnd свойства является значением даты без компонента времени.

Так как дата окончания текущего правила корректировки обычно неизвестна, вы можете назначить DateTime.MaxValue.Date свойству DateEnd при создании настраиваемого правила корректировки.

Важно!

Если нет веских оснований делать иное, следует определить дату окончания правила корректировки, которая будет происходить в пределах интервала времени, в течение которого часовой пояс наблюдает стандартное время. Если для этого нет веских оснований, не следует определять дату окончания правила корректировки в пределах интервала времени, в течение которого часовой пояс наблюдает переход на летнее время. Например, если переход часового пояса с летнего времени происходит в третье воскресенье марта, а переход на летнее время происходит в первое воскресенье октября, то действующей датой окончания правила корректировки не должно быть 31 декабря определенного года, так как эта дата наступает в течение летнего времени.

По умолчанию реестр в Windows XP определяет одно правило корректировки, дата окончания которого — пятница, 31 декабря 9999 г. (значение ) для каждого часового пояса DateTime.MaxValue.Date. Для часовых поясов в США реестр в Windows Vista определяет два правила корректировки:

  • Понедельник, Январь 01, 0001, по воскресенье, 31 декабря 2006.

  • Понедельник, Январь 01, 2007, по пятница, 31 декабря 9999.

Это означает, что, хотя правила корректировки часовых поясов, хранящиеся в реестре, полезны для выполнения текущих операций, связанных с часовыми поясами, их нельзя надежно использовать для получения исторических сведений о часовом поясе. Сведения об определении пользовательского часового пояса с несколькими правилами корректировки, которые можно использовать в приложении, поддерживающем исторические часовые пояса, см. в разделе Практическое руководство. Создание часовых поясов с помощью правил корректировки.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1