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 此方法會考慮時區調整,因為時區調整發生在 2010 年 11 月 7 日上午 2:00 的來源和目的地時區。

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) 這個多載會從 dateTime 參數 Kind 的 屬性值判斷來源時區,如下表所示。

Kind 屬性值 來源時區 方法行為
DateTimeKind.Local Local 將當地時間轉換為 中的 destinationTimeZone 時間。
DateTimeKind.Utc Utc 將國際標準時間 (UTC) 轉換為 中的 destinationTimeZone 時間。
DateTimeKind.Unspecified 假設為 Local 將當地時間轉換為 中的 destinationTimeZone 時間。

KindDateTime 值的 屬性會設定如下表所示。

條件 傳回的 Kind 屬性值
destinationTimeZoneTimeZoneInfo.Utc DateTimeKind.Utc
destinationTimeZoneTimeZoneInfo.Local DateTimeKind.Local
所有其他日期和時間值和目的地時區。 DateTimeKind.Unspecified

如果參數的值是模棱兩可的 dateTime 當地時間,則會解譯為標準時間。 dateTime如果參數是不正確當地時間,這個方法會擲回 ArgumentException

如果轉換 dateTime 結果的日期和時間值早于 DateTime.MinValue 或 晚 DateTime.MaxValue ,則此方法會分別傳回 DateTime.MinValueDateTime.MaxValue

您也可以呼叫 ConvertTimeFromUtcConvertTimeToUtc 方法,以轉換至 UTC 或從 UTC。

另請參閱

適用於

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

要轉換 dateTime 的目標時區。

傳回

目的地時區中的日期與時間。

例外狀況

destinationTimeZone 參數的值為 null

範例

下列範例會將值的陣列 DateTimeOffset 轉換成美國和加拿大東部時區中的時間。 它說明 ConvertTime 此方法會考慮時區調整,因為時區調整發生在 2010 年 11 月 7 日上午 2:00 的來源和目的地時區。

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.MinValueDateTimeOffset.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 參數。

例外狀況

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 生效的任何調整規則。

參數的 KinddateTime 屬性值必須對應至 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) 。

KindDateTime 值的 屬性會設定如下表所示。

條件 傳回的 Kind 屬性值
destinationTimeZone 引數為 TimeZoneInfo.Utc DateTimeKind.Utc
destinationTimeZone 引數為 TimeZoneInfo.Local DateTimeKind.Local
所有其他日期和時間值、來源時區和目的地時區。 DateTimeKind.Unspecified

如果參數的值 dateTime 在來源時區中是模棱兩可的時間,則會解譯為標準時間。 dateTime如果參數在來源時區中是不正確時間,這個方法會擲回 ArgumentException

如果轉換 dateTime 結果的日期和時間值早于 DateTime.MinValue 或 晚 DateTime.MaxValue ,則此方法會分別傳回 DateTime.MinValueDateTime.MaxValue

如果 DateTime.Kind 引數的 dateTime 屬性為 DateTimeKind.Local ,但 sourceTimeZone 引數不是 TimeZoneInfo.Local ,則 ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法會擲 ArgumentException 回例外狀況。 若要判斷來源時區是當地時區還是通用時區,此方法會測試參考相等,而不是測試與 方法的值相等 Equals(TimeZoneInfo) 。 請注意, TimeZoneInfo 表示當地時區且藉由呼叫 FindSystemTimeZoneById 方法所擷取的物件沒有與 的引用相等 TimeZoneInfo.Local 。 此外, TimeZoneInfo 代表本機或通用時區且透過逐一查看 方法傳 GetSystemTimeZones 回之集合所擷取的物件,與 或 TimeZoneInfo.Utc 沒有引用相等。 TimeZoneInfo.Local 或者,您可以呼叫 ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法。

另請參閱

適用於