TimeZoneInfo.ConvertTime 方法

定义

将时间转换为特定时区的时间。

重载

ConvertTime(DateTime, TimeZoneInfo)

将时间转换为特定时区的时间。

ConvertTime(DateTimeOffset, TimeZoneInfo)

将时间转换为特定时区的时间。

ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)

将时间从一个时区转换到另一个时区。

ConvertTime(DateTime, TimeZoneInfo)

将时间转换为特定时区的时间。

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

目标时区的日期和时间。

例外

dateTime 参数值表示无效的时间。

destinationTimeZone 参数的值为 null

示例

以下示例将日期和时间值的数组转换为美国和加拿大东部时区中的时间。 它显示源时区取决于 DateTime.KindDateTime 值的属性。 它还说明该方法 ConvertTime 考虑到时区调整,因为时区调整同时发生在源时区和目标时区(上午 2:00)。 2010 年 11 月 7 日。

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 属性值
destinationTimeZoneTimeZoneInfo.Utc DateTimeKind.Utc
destinationTimeZoneTimeZoneInfo.Local DateTimeKind.Local
所有其他日期和时间值以及目标时区。 DateTimeKind.Unspecified

如果参数的值 dateTime 是一个不明确的本地时间,则将其解释为标准时间。 dateTime如果参数是无效的本地时间,此方法将引发 。ArgumentException

如果结果在早于DateTime.MinValue或晚于DateTime.MaxValue或晚的日期和时间值的转换dateTime,则此方法返回或分别返回DateTime.MinValueDateTime.MaxValue返回。

还可以通过调用 ConvertTimeFromUtcConvertTimeToUtc 方法转换到 UTC 或从 UTC 转换。

另请参阅

适用于

ConvertTime(DateTimeOffset, TimeZoneInfo)

将时间转换为特定时区的时间。

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

要将 dateTime 转换到的时区。

返回

DateTimeOffset

目标时区的日期和时间。

例外

destinationTimeZone 参数的值为 null

示例

以下示例将值数组 DateTimeOffset 转换为美国和加拿大东部时区中的时间。 它说明该方法 ConvertTime 考虑到时区调整,因为时区调整同时发生在源时区和目标时区凌晨 2:00。 2010 年 11 月 7 日。

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.MinValue或晚于DateTimeOffset.MaxValue或晚的日期和时间值的转换dateTimeOffset,则此方法返回或分别返回DateTimeOffset.MinValueDateTimeOffset.MaxValue返回。

另请参阅

适用于

ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)

将时间从一个时区转换到另一个时区。

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

目标时区中与源时区中的 dateTime 参数对应的日期和时间。

例外

dateTime 参数的 Kind 属性是 Local,但 sourceTimeZone 参数不等于 Local

  • 或 - dateTime 参数的 Kind 属性是 Utc,但 sourceTimeZone 参数不等于 Utc

  • 或 - dateTime 参数是无效时间(即,由于时区的调整规则,它表示不存在的时间)。

sourceTimeZone 参数为 null

  • 或 - destinationTimeZone 参数为 null

示例

下面的示例演示了如何使用 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 生效的任何调整规则。

如下表所示,参数属性dateTime的值Kind必须与参数相对应sourceTimeZone

DateTime.Kind 值 sourceTimeZone 值 方法行为
DateTimeKind.Utc TimeZoneInfo.Utc等于 。 dateTime转换为目标时区的时间。
DateTimeKind.Utc Does not equal TimeZoneInfo.Utc 引发一个 ArgumentException
DateTimeKind.Local TimeZoneInfo.Local等于 。 dateTime转换为目标时区的时间。
DateTimeKind.Local Does not equal TimeZoneInfo.Local 引发一个 ArgumentException
DateTimeKind.Unspecified 任何。 dateTime转换为目标时区的时间。

还可以通过调用 ConvertTimeFromUtcConvertTimeToUtc 方法来转换为或从协调世界时 (UTC) 。

返回 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)如果DateTime.Kind参数的属性dateTime不是DateTimeKind.LocalTimeZoneInfo.LocalsourceTimeZone参数,该方法将ArgumentException引发异常。 若要确定源时区是本地时区还是通用时区,该方法测试引用相等性,而不是测试方法 Equals(TimeZoneInfo) 的值相等性。 请注意, TimeZoneInfo 表示本地时区且通过调用 FindSystemTimeZoneById 该方法检索的对象不具有 TimeZoneInfo.Local引用相等性。 此外,TimeZoneInfo表示本地或通用时区的对象以及通过循环访问方法返回的GetSystemTimeZones集合来检索的对象没有引用相等性或TimeZoneInfo.Utc相同性TimeZoneInfo.Local。 作为替代方法,可以调用 ConvertTimeBySystemTimeZoneId(DateTime, String, String) 该方法。

另请参阅

适用于