TimeZoneInfo.ConvertTime 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將時間轉換為特定時區的時間。
多載
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
參數的值表示無效的時間。
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 時間。 |
傳 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 。
您也可以呼叫 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法,以轉換至 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
的目標時區。
傳回
目的地時區中的日期與時間。
例外狀況
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.MinValue 或 DateTimeOffset.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
參數的 Kind 屬性為 Local,但 sourceTimeZone
參數不等於 Local。
-或-
dateTime
參數的 Kind 屬性為 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
生效的任何調整規則。
參數的 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 轉換為目的地時區的時間。 |
您也可以藉由呼叫 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法,來轉換成或從國際標準時間 (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 。
如果 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) 方法。
另請參閱
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應