TimeZoneInfo.ConvertTime 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将时间转换为特定时区的时间。
重载
ConvertTime(DateTime, TimeZoneInfo) |
将时间转换为特定时区的时间。 |
ConvertTime(DateTimeOffset, TimeZoneInfo) |
将时间转换为特定时区的时间。 |
ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) |
将时间从一个时区转换到另一个时区。 |
ConvertTime(DateTime, TimeZoneInfo)
- Source:
- TimeZoneInfo.cs
- Source:
- TimeZoneInfo.cs
- Source:
- 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)此重载根据参数Kind属性的值dateTime
确定源时区,如下表所示。
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 进行转换。
另请参阅
适用于
ConvertTime(DateTimeOffset, TimeZoneInfo)
- Source:
- TimeZoneInfo.cs
- Source:
- TimeZoneInfo.cs
- Source:
- 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.MinValue 或 DateTimeOffset.MaxValue。
另请参阅
适用于
ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)
- Source:
- TimeZoneInfo.cs
- Source:
- TimeZoneInfo.cs
- Source:
- 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
参数是无效时间(即,由于时区的调整规则,它表示不存在的时间)。
示例
以下示例演示如何使用 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 和 方法,将协调世界时 (UTC) 转换为或 ConvertTimeToUtc 从协调世界时转换。
已 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.Local ,但sourceTimeZone
参数不是 TimeZoneInfo.Local,则方法将引发ArgumentException异常。 若要确定源时区是本地时区还是通用时区,该方法会测试引用相等性,而不是使用 Equals(TimeZoneInfo) 方法测试值相等性。 请注意, TimeZoneInfo 表示本地时区并通过调用 FindSystemTimeZoneById 方法检索的对象与 不具有引用相等性 TimeZoneInfo.Local。 此外,TimeZoneInfo表示本地或通用时区并通过循环访问 方法返回GetSystemTimeZones的集合检索的对象与 或 TimeZoneInfo.Utc没有引用相等性TimeZoneInfo.Local。 或者,可以调用 ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法。
另请参阅
适用于
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈