TimeZoneInfo.ConvertTime Метод

Определение

Преобразует время в определенный часовой пояс.

Перегрузки

ConvertTime(DateTime, TimeZoneInfo)

Преобразует время в определенный часовой пояс.

ConvertTime(DateTimeOffset, TimeZoneInfo)

Преобразует время в определенный часовой пояс.

ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)

Преобразует время из одного часового пояса в другой.

ConvertTime(DateTime, TimeZoneInfo)

Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs

Преобразует время в определенный часовой пояс.

public static DateTime ConvertTime (DateTime dateTime, TimeZoneInfo destinationTimeZone);

Параметры

dateTime
DateTime

Дата и время преобразования.

destinationTimeZone
TimeZoneInfo

Часовой пояс для преобразования dateTime в.

Возвращаемое значение

Дата и время в часовом поясе назначения.

Исключения

Значение параметра dateTime представляет недопустимое время.

Значение параметра destinationTimeZone равно null.

Примеры

В следующем примере массив значений даты и времени преобразуется в время в восточном часовом поясе США и Канады. В нем показано, что исходный часовой пояс зависит от свойства DateTime.Kind исходного значения DateTime. В нем также показано, что метод ConvertTime учитывает корректировки часового пояса, так как корректировка часового пояса происходит как в часовых поясах источника, так и в конечных часовых поясах в 2:00 утра 7 ноября 2010 года.

using System;

public class Example
{
   public static void Main()
   {
      // Define times to be converted.
      DateTime[] times = { new DateTime(2010, 1, 1, 0, 1, 0), 
                           new DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Utc), 
                           new DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Local),                            
                           new DateTime(2010, 11, 6, 23, 30, 0),
                           new DateTime(2010, 11, 7, 2, 30, 0) };
                              
      // Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      TimeZoneInfo est; 
      try {
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      }
      catch (TimeZoneNotFoundException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }
      catch (InvalidTimeZoneException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }   

      // Display the current time zone name.
      Console.WriteLine("Local time zone: {0}\n", TimeZoneInfo.Local.DisplayName);
      
      // Convert each time in the array.
      foreach (DateTime timeToConvert in times)
      {
         DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
         Console.WriteLine("Converted {0} {1} to {2}.", timeToConvert, 
                           timeToConvert.Kind, targetTime);
      }                        
   }
}
// The example displays the following output:
//    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
//    
//    Converted 1/1/2010 12:01:00 AM Unspecified to 1/1/2010 3:01:00 AM.
//    Converted 1/1/2010 12:01:00 AM Utc to 12/31/2009 7:01:00 PM.
//    Converted 1/1/2010 12:01:00 AM Local to 1/1/2010 3:01:00 AM.
//    Converted 11/6/2010 11:30:00 PM Unspecified to 11/7/2010 1:30:00 AM.
//    Converted 11/7/2010 2:30:00 AM Unspecified to 11/7/2010 5:30:00 AM.

Комментарии

При преобразовании метод ConvertTime(DateTimeOffset, TimeZoneInfo) применяет все правила корректировки, действующие в часовом поясе destinationTimeZone.

Эта перегрузка метода ConvertTime(DateTime, TimeZoneInfo) определяет исходный часовой пояс из значения свойства Kind параметра dateTime, как показано в следующей таблице.

Значение свойства Kind Исходный часовой пояс Поведение метода
DateTimeKind.Local Local Преобразует локальное время в время destinationTimeZone.
DateTimeKind.Utc Utc Преобразует координированное универсальное время (UTC) в время в destinationTimeZone.
DateTimeKind.Unspecified Предполагается, что Local. Преобразует локальное время в время destinationTimeZone.

Свойство Kind возвращаемого значения DateTime задано, как показано в следующей таблице.

Состояние Возвращаемое значение свойства Kind
destinationTimeZone TimeZoneInfo.Utc. DateTimeKind.Utc
destinationTimeZone TimeZoneInfo.Local. DateTimeKind.Local
Все остальные значения даты и времени и часовых поясов назначения. DateTimeKind.Unspecified

Если значение параметра dateTime является неоднозначным локальным временем, оно интерпретируется как стандартное время. Если параметр dateTime является недопустимым локальным временем, этот метод создает ArgumentException.

Если преобразование dateTime приводит к значению даты и времени, которое раньше DateTime.MinValue или более поздней DateTime.MaxValue, этот метод возвращает DateTime.MinValue или DateTime.MaxValueсоответственно.

Вы также можете преобразовать или из UTC, вызвав методы ConvertTimeFromUtc и ConvertTimeToUtc.

См. также раздел

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.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 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

ConvertTime(DateTimeOffset, TimeZoneInfo)

Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs

Преобразует время в определенный часовой пояс.

public static DateTimeOffset ConvertTime (DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone);

Параметры

dateTimeOffset
DateTimeOffset

Дата и время преобразования.

destinationTimeZone
TimeZoneInfo

Часовой пояс для преобразования dateTimeOffset в.

Возвращаемое значение

Дата и время в часовом поясе назначения.

Исключения

Значение параметра destinationTimeZone равно null.

Примеры

В следующем примере массив значений DateTimeOffset преобразуется в время в восточном часовом поясе США и Канады. В нем показано, что метод ConvertTime учитывает корректировки часового пояса, так как корректировка часового пояса происходит как в часовых поясах источника, так и в конечных часовых поясах в 2:00 утра 7 ноября 2010 года.

using System;

public class Example
{
   public static void Main()
   {
      // Define times to be converted.
      DateTime time1 = new DateTime(2010, 1, 1, 12, 1, 0);
      DateTime time2 = new DateTime(2010, 11, 6, 23, 30, 0);
      DateTimeOffset[] times = { new DateTimeOffset(time1, TimeZoneInfo.Local.GetUtcOffset(time1)),
                                 new DateTimeOffset(time1, TimeSpan.Zero),
                                 new DateTimeOffset(time2, TimeZoneInfo.Local.GetUtcOffset(time2)),
                                 new DateTimeOffset(time2.AddHours(3), TimeZoneInfo.Local.GetUtcOffset(time2.AddHours(3))) };
                              
      // Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
      TimeZoneInfo est; 
      try {
         est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      }
      catch (TimeZoneNotFoundException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }
      catch (InvalidTimeZoneException) {
         Console.WriteLine("Unable to retrieve the Eastern Standard time zone.");
         return;
      }   

      // Display the current time zone name.
      Console.WriteLine("Local time zone: {0}\n", TimeZoneInfo.Local.DisplayName);
      
      // Convert each time in the array.
      foreach (DateTimeOffset timeToConvert in times)
      {
         DateTimeOffset targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);
         Console.WriteLine("Converted {0} to {1}.", timeToConvert, targetTime);
      }                        
   }
}
// The example displays the following output:
//    Local time zone: (GMT-08:00) Pacific Time (US & Canada)
//    
//    Converted 1/1/2010 12:01:00 AM -08:00 to 1/1/2010 3:01:00 AM -05:00.
//    Converted 1/1/2010 12:01:00 AM +00:00 to 12/31/2009 7:01:00 PM -05:00.
//    Converted 11/6/2010 11:30:00 PM -07:00 to 11/7/2010 1:30:00 AM -05:00.
//    Converted 11/7/2010 2:30:00 AM -08:00 to 11/7/2010 5:30:00 AM -05:00.

Комментарии

При преобразовании метод ConvertTime(DateTimeOffset, TimeZoneInfo) применяет все правила корректировки, действующие в часовом поясе destinationTimeZone.

Эта перегрузка отличается от других перегрузки метода ConvertTime путем принятия значения DateTimeOffset в качестве первого параметра. Это определяет дату и время как смещение от согласованного универсального времени (UTC), а не в качестве даты и времени в определенном часовом поясе. В результате параметр dateTimeOffset не может представлять неоднозначное время или недопустимое время.

При преобразовании значения dateTimeOffset в время в часовом поясе назначения этот метод учитывает все правила корректировки, действующие в часовом поясе назначения.

Если преобразование dateTimeOffset приводит к значению даты и времени, которое раньше DateTimeOffset.MinValue или более поздней DateTimeOffset.MaxValue, этот метод возвращает DateTimeOffset.MinValue или DateTimeOffset.MaxValueсоответственно.

См. также раздел

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.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 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)

Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs
Исходный код:
TimeZoneInfo.cs

Преобразует время из одного часового пояса в другой.

public static DateTime ConvertTime (DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone);

Параметры

dateTime
DateTime

Дата и время преобразования.

sourceTimeZone
TimeZoneInfo

Часовой пояс dateTime.

destinationTimeZone
TimeZoneInfo

Часовой пояс для преобразования dateTime в.

Возвращаемое значение

Дата и время в часовом поясе назначения, соответствующее параметру dateTime в исходном часовом поясе.

Исключения

Свойство Kind параметра dateTimeLocal, но параметр sourceTimeZone не равен Local.

-или-

Свойство Kind параметра dateTimeUtc, но параметр sourceTimeZone не равен Utc.

-или-

Параметр dateTime является недопустимым временем (то есть представляет время, которое не существует из-за правил корректировки часового пояса).

Параметр sourceTimeZonenull.

-или-

Параметр destinationTimeZonenull.

Примеры

В следующем примере показано использование метода ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) для преобразования из гавайского стандартного времени в местное время.

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.", 
           hwTime, 
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.");
}

Комментарии

При преобразовании метод ConvertTime применяет все правила корректировки, действующие в часовом поясе destinationTimeZone.

Значение свойства Kind параметра dateTime должно соответствовать параметру sourceTimeZone, как показано в следующей таблице.

Значение DateTime.Kind значение sourceTimeZone Поведение метода
DateTimeKind.Utc Равно TimeZoneInfo.Utc. Преобразует dateTime в время часового пояса назначения.
DateTimeKind.Utc Не равно TimeZoneInfo.Utc. Создает ArgumentException.
DateTimeKind.Local Равно TimeZoneInfo.Local. Преобразует dateTime в время часового пояса назначения.
DateTimeKind.Local Не равно TimeZoneInfo.Local. Создает ArgumentException.
DateTimeKind.Unspecified Любой. Преобразует dateTime в время часового пояса назначения.

Вы также можете преобразовать в универсальный код времени (UTC) или из нее, вызвав методы ConvertTimeFromUtc и ConvertTimeToUtc.

Свойство Kind возвращаемого значения DateTime задано, как показано в следующей таблице.

Состояние Возвращаемое значение свойства Kind
Аргумент destinationTimeZoneTimeZoneInfo.Utc. DateTimeKind.Utc
Аргумент destinationTimeZoneTimeZoneInfo.Local. DateTimeKind.Local
Все остальные значения даты и времени, часовых поясов источника и часовых поясов назначения. DateTimeKind.Unspecified

Если значение параметра dateTime является неоднозначным временем в исходном часовом поясе, оно интерпретируется как стандартное время. Если параметр dateTime является недопустимым временем в исходном часовом поясе, этот метод создает ArgumentException.

Если преобразование dateTime приводит к значению даты и времени, которое раньше DateTime.MinValue или более поздней DateTime.MaxValue, этот метод возвращает DateTime.MinValue или DateTime.MaxValueсоответственно.

Метод ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) вызывает исключение ArgumentException, если свойство DateTime.Kind аргумента dateTimeDateTimeKind.Local, но аргумент sourceTimeZone не TimeZoneInfo.Local. Чтобы определить, является ли исходный часовой пояс локальным часовом поясом или универсальным часовом поясом, метод проверяет равенство ссылок вместо тестирования на равенство значений с методом Equals(TimeZoneInfo). Обратите внимание, что TimeZoneInfo объекты, представляющие локальный часовой пояс и извлекаемые путем вызова метода FindSystemTimeZoneById, не имеют ссылочной равенства с TimeZoneInfo.Local. Кроме того, TimeZoneInfo объекты, представляющие локальный или универсальный часовой пояс и извлекаемые путем итерации коллекции, возвращаемой методом GetSystemTimeZones, не имеют ссылочной равенства с TimeZoneInfo.Local или TimeZoneInfo.Utc. В качестве альтернативы можно вызвать метод ConvertTimeBySystemTimeZoneId(DateTime, String, String).

См. также раздел

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.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 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0