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);
public static DateTime ConvertTime (DateTime dateTime, TimeZoneInfo destinationTimeZone);
static member ConvertTime : DateTime * TimeZoneInfo -> DateTime
Public Shared Function ConvertTime (dateTime As DateTime, destinationTimeZone As TimeZoneInfo) As DateTime
Параметры
- 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.
open System
// Define times to be converted.
let times =
[| DateTime(2010, 1, 1, 0, 1, 0)
DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Utc)
DateTime(2010, 1, 1, 0, 1, 0, DateTimeKind.Local)
DateTime(2010, 11, 6, 23, 30, 0)
DateTime(2010, 11, 7, 2, 30, 0) |]
// Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
try
let est = TimeZoneInfo.FindSystemTimeZoneById "Eastern Standard Time"
// Display the current time zone name.
printfn $"Local time zone: {TimeZoneInfo.Local.DisplayName}\n"
// Convert each time in the array.
for timeToConvert in times do
let targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est)
printfn $"Converted {timeToConvert} {timeToConvert.Kind} to {targetTime}."
with
| :? TimeZoneNotFoundException ->
printfn "Unable to retrieve the Eastern Standard time zone."
| :? InvalidTimeZoneException ->
printfn "Unable to retrieve the Eastern Standard time zone."
// 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.
Module Example
Public Sub Main()
' Define times to be converted.
Dim times() As Date = { #1/1/2010 12:01AM#, _
DateTime.SpecifyKind(#1/1/2010 12:01AM#, DateTimeKind.Utc), _
DateTime.SpecifyKind(#1/1/2010 12:01AM#, DateTimeKind.Local), _
#11/6/2010 11:30PM#, #11/7/2010 2:30AM# }
' Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
Dim est As TimeZoneInfo
Try
est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Catch e As TimeZoneNotFoundException
Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
Exit Sub
Catch e As InvalidTimeZoneException
Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
Exit Sub
End Try
' Display the current time zone name.
Console.WriteLine("Local time zone: {0}", TimeZoneInfo.Local.DisplayName)
Console.WriteLine()
' Convert each time in the array.
For Each timeToConvert As Date In times
Dim targetTime As Date = TimeZoneInfo.ConvertTime(timeToConvert, est)
Console.WriteLine("Converted {0} {1} to {2}.", timeToConvert, _
timeToConvert.Kind, targetTime)
Next
End Sub
End Module
' 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.
См. также раздел
Применяется к
ConvertTime(DateTimeOffset, TimeZoneInfo)
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
Преобразует время в определенный часовой пояс.
public:
static DateTimeOffset ConvertTime(DateTimeOffset dateTimeOffset, TimeZoneInfo ^ destinationTimeZone);
public static DateTimeOffset ConvertTime (DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone);
static member ConvertTime : DateTimeOffset * TimeZoneInfo -> DateTimeOffset
Public Shared Function ConvertTime (dateTimeOffset As DateTimeOffset, destinationTimeZone As TimeZoneInfo) As DateTimeOffset
Параметры
- 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.
open System
// Define times to be converted.
let time1 = DateTime(2010, 1, 1, 12, 1, 0)
let time2 = DateTime(2010, 11, 6, 23, 30, 0)
let times =
[| DateTimeOffset(time1, TimeZoneInfo.Local.GetUtcOffset time1)
DateTimeOffset(time1, TimeSpan.Zero)
DateTimeOffset(time2, TimeZoneInfo.Local.GetUtcOffset time2)
DateTimeOffset(time2.AddHours 3, TimeZoneInfo.Local.GetUtcOffset(time2.AddHours 3)) |]
// Retrieve the time zone for Eastern Standard Time (U.S. and Canada).
try
let est = TimeZoneInfo.FindSystemTimeZoneById "Eastern Standard Time"
// Display the current time zone name.
printfn $"Local time zone: {TimeZoneInfo.Local.DisplayName}\n"
// Convert each time in the array.
for timeToConvert in times do
let targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est)
printfn $"Converted {timeToConvert} to {targetTime}."
with
| :? TimeZoneNotFoundException ->
printfn "Unable to retrieve the Eastern Standard time zone."
| :? InvalidTimeZoneException ->
printfn "Unable to retrieve the Eastern Standard time zone."
// 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.
Module Example
Public Sub Main()
' Define times to be converted.
Dim time1 As Date = #1/1/2010 12:01AM#
Dim time2 As Date = #11/6/2010 11:30PM#
Dim times() As DateTimeOffset = { 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).
Dim est As TimeZoneInfo
Try
est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Catch e As TimeZoneNotFoundException
Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
Exit Sub
Catch e As InvalidTimeZoneException
Console.WriteLine("Unable to retrieve the Eastern Standard time zone.")
Exit Sub
End Try
' Display the current time zone name.
Console.WriteLine("Local time zone: {0}", TimeZoneInfo.Local.DisplayName)
Console.WriteLine()
' Convert each time in the array.
For Each timeToConvert As DateTimeOffset In times
Dim targetTime As DateTimeOffset = TimeZoneInfo.ConvertTime(timeToConvert, est)
Console.WriteLine("Converted {0} to {1}.", timeToConvert, targetTime)
Next
End Sub
End Module
' 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соответственно.
См. также раздел
Применяется к
ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
- Исходный код:
- TimeZoneInfo.cs
Преобразует время из одного часового пояса в другой.
public:
static DateTime ConvertTime(DateTime dateTime, TimeZoneInfo ^ sourceTimeZone, TimeZoneInfo ^ destinationTimeZone);
public static DateTime ConvertTime (DateTime dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone);
static member ConvertTime : DateTime * TimeZoneInfo * TimeZoneInfo -> DateTime
Public Shared Function ConvertTime (dateTime As DateTime, sourceTimeZone As TimeZoneInfo, destinationTimeZone As TimeZoneInfo) As DateTime
Параметры
- dateTime
- DateTime
Дата и время преобразования.
- sourceTimeZone
- TimeZoneInfo
Часовой пояс dateTime
.
- destinationTimeZone
- TimeZoneInfo
Часовой пояс для преобразования dateTime
в.
Возвращаемое значение
Дата и время в часовом поясе назначения, соответствующее параметру dateTime
в исходном часовом поясе.
Исключения
Свойство Kind параметра dateTime
Local, но параметр sourceTimeZone
не равен Local.
-или-
Свойство Kind параметра dateTime
Utc, но параметр sourceTimeZone
не равен Utc.
-или-
Параметр dateTime
является недопустимым временем (то есть представляет время, которое не существует из-за правил корректировки часового пояса).
Примеры
В следующем примере показано использование метода 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.");
}
let hwTime = DateTime(2007, 02, 01, 08, 00, 00)
try
let hwZone = TimeZoneInfo.FindSystemTimeZoneById "Hawaiian Standard Time"
printfn $"{hwTime} {if hwZone.IsDaylightSavingTime hwTime then hwZone.DaylightName else hwZone.StandardName} is {TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local)} local time."
with
| :? TimeZoneNotFoundException ->
printfn "The registry does not define the Hawaiian Standard Time zone."
| :? InvalidTimeZoneException ->
printfn "Registry data on the Hawaiian Standard Time zone has been corrupted."
Dim hwTime As Date = #2/01/2007 8:00:00 AM#
Try
Dim hwZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")
Console.WriteLine("{0} {1} is {2} local time.", _
hwTime, _
IIf(hwZone.IsDaylightSavingTime(hwTime), hwZone.DaylightName, hwZone.StandardName), _
TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local))
Catch e As TimeZoneNotFoundException
Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.")
Catch e As InvalidTimeZoneException
Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.")
End Try
Комментарии
При преобразовании метод 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 |
---|---|
Аргумент destinationTimeZone TimeZoneInfo.Utc. |
DateTimeKind.Utc |
Аргумент destinationTimeZone TimeZoneInfo.Local. |
DateTimeKind.Local |
Все остальные значения даты и времени, часовых поясов источника и часовых поясов назначения. | DateTimeKind.Unspecified |
Если значение параметра dateTime
является неоднозначным временем в исходном часовом поясе, оно интерпретируется как стандартное время. Если параметр dateTime
является недопустимым временем в исходном часовом поясе, этот метод создает ArgumentException.
Если преобразование dateTime
приводит к значению даты и времени, которое раньше DateTime.MinValue или более поздней DateTime.MaxValue, этот метод возвращает DateTime.MinValue или DateTime.MaxValueсоответственно.
Метод ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) вызывает исключение ArgumentException, если свойство DateTime.Kind аргумента dateTime
DateTimeKind.Local, но аргумент sourceTimeZone
не TimeZoneInfo.Local. Чтобы определить, является ли исходный часовой пояс локальным часовом поясом или универсальным часовом поясом, метод проверяет равенство ссылок вместо тестирования на равенство значений с методом Equals(TimeZoneInfo). Обратите внимание, что TimeZoneInfo объекты, представляющие локальный часовой пояс и извлекаемые путем вызова метода FindSystemTimeZoneById, не имеют ссылочной равенства с TimeZoneInfo.Local. Кроме того, TimeZoneInfo объекты, представляющие локальный или универсальный часовой пояс и извлекаемые путем итерации коллекции, возвращаемой методом GetSystemTimeZones, не имеют ссылочной равенства с TimeZoneInfo.Local или TimeZoneInfo.Utc. В качестве альтернативы можно вызвать метод ConvertTimeBySystemTimeZoneId(DateTime, String, String).