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 值的 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.MinValue 或 DateTime.MaxValue。
您也可以呼叫 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法,來轉換或轉換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
要轉換成 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.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
時區中生效的任何調整規則。
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 轉換為目的地時區的時間。 |
您也可以呼叫 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法,來轉換至國際標準時間(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.MinValue 或 DateTime.MaxValue。
如果 dateTime
自變數的 DateTime.Kind 屬性是 DateTimeKind.Local,但 sourceTimeZone
自變數不是 TimeZoneInfo.Local,則 ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法會擲回 ArgumentException 例外狀況。 若要判斷來源時區是本地時區還是通用時區,此方法會測試參考相等,而不是使用 Equals(TimeZoneInfo) 方法測試值相等。 請注意,呼叫 FindSystemTimeZoneById 方法所擷取的 TimeZoneInfo 物件,與 TimeZoneInfo.Local沒有引用相等。 此外,TimeZoneInfo 對象,這些物件代表本機或通用時區,而且透過逐一查看 GetSystemTimeZones 方法傳回的集合而擷取的物件,與 TimeZoneInfo.Local 或 TimeZoneInfo.Utc沒有引用相等。 或者,您可以呼叫 ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法。