共用方式為


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 值的 DateTime.Kind 屬性。 這也說明 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中的時間。

所傳回 DateTime 值的 Kind 屬性已設定,如下表所示。

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

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

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

您也可以呼叫 ConvertTimeFromUtcConvertTimeToUtc 方法,來轉換或轉換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

要轉換成 dateTimeOffset 的時區。

傳回

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

例外狀況

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

dateTime 參數的 Kind 屬性值必須對應至 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 轉換為目的地時區的時間。

您也可以呼叫 ConvertTimeFromUtcConvertTimeToUtc 方法,來轉換至國際標準時間(UTC)。

所傳回 DateTime 值的 Kind 屬性已設定,如下表所示。

條件 傳回的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 自變數的 DateTime.Kind 屬性是 DateTimeKind.Local,但 sourceTimeZone 自變數不是 TimeZoneInfo.Local,則 ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法會擲回 ArgumentException 例外狀況。 若要判斷來源時區是本地時區還是通用時區,此方法會測試參考相等,而不是使用 Equals(TimeZoneInfo) 方法測試值相等。 請注意,呼叫 FindSystemTimeZoneById 方法所擷取的 TimeZoneInfo 物件,與 TimeZoneInfo.Local沒有引用相等。 此外,TimeZoneInfo 對象,這些物件代表本機或通用時區,而且透過逐一查看 GetSystemTimeZones 方法傳回的集合而擷取的物件,與 TimeZoneInfo.LocalTimeZoneInfo.Utc沒有引用相等。 或者,您可以呼叫 ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法。

另請參閱

適用於