System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)
方法描述
根据时区标识符将时间从一个时区转换到另一个时区。
语法定义(C# System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String) 的用法)
public static DateTime ConvertTimeBySystemTimeZoneId( DateTime dateTime, string sourceTimeZoneId, string destinationTimeZoneId )
参数/返回值
参数值/返回值 | 参数类型/返回类型 | 参数描述/返回描述 |
---|---|---|
dateTime | System-DateTime | 要转换的日期和时间。 |
sourceTimeZoneId | System-String | 源时区的标识符。 |
destinationTimeZoneId | System-String | 目标时区的标识符。 |
返回值 | System.DateTime | 目标时区中与源时区中的 dateTime 参数对应的日期和时间。 |
提示和注释
执行转换时,ConvertTimeBySystemTimeZoneId 方法将有效应用 destinationTimeZoneId 时区中的任何调整规则。
尽管与 TimeZoneInfo.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法类似,但您可以使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 并通过其标识符而不是其 TimeZoneInfo 对象来指定源时区和目标时区。 如果您必须转换时间而不检索与该时间相对应的时区对象,并且不需要知道转换后的时间是标准时间还是夏时制时间,则此方法非常有用。
此方法检索标识符是来自注册表的 sourceTimeZoneId 和 destinationTimeZoneId 参数的时区。 它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。
dateTime 参数的 Kind 属性值必须对应于 sourceTimeZoneId 参数,如下表所示。
DateTime.Kind 值
sourceTimeZone 值
方法行为
DateTimeKind.Utc
等于 TimeZoneInfo.Utc.Id。
将 dateTime 转换为目标时区的时间。
DateTimeKind.Utc
不等于 TimeZoneInfo.Utc.Id。
引发 ArgumentException。
DateTimeKind.Local
等于 TimeZoneInfo.Local.Id。
将 dateTime 转换为目标时区的时间。
DateTimeKind.Local
不等于 TimeZoneInfo.Local.Id。
引发 ArgumentException。
DateTimeKind.Unspecified
任意。
将 dateTime 转换为目标时区的时间。
由于 ConvertTimeBySystemTimeZoneId 方法依赖于对 FindSystemTimeZoneById 方法的调用,因此前者执行不区分大小写的搜索,以查找与 sourceTimeZoneId 和 destinationTimeZoneId 相对应的时区。
如果 dateTime 参数值是源时区中的不明确时间,则将该时间解释为标准时间。 如果 dateTime 参数是源时区中的无效时间,则此方法会引发 ArgumentException。
将返回的 DateTime 值的 Kind 属性设置为 DateTimeKind.Unspecified,除非目标时区为协调世界时 (UTC),在该情况下将该属性设置为 DateTimeKind.Utc。
System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)例子
下面的示例使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法显示对应于世界上八个城市的本地系统时间的时间。
DateTime currentTime = DateTime.Now; Console.WriteLine("Current Times:"); Console.WriteLine(); Console.WriteLine("Los Angeles: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time")); Console.WriteLine("Chicago: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time")); Console.WriteLine("New York: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time")); Console.WriteLine("London: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time")); Console.WriteLine("Moscow: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time")); Console.WriteLine("New Delhi: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time")); Console.WriteLine("Beijing: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time")); Console.WriteLine("Tokyo: {0}", TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"));
异常
异常 | 异常描述 |
---|---|
ArgumentException |
|
ArgumentNullException |
|
InvalidTimeZoneException | 已找到时区标识符,但注册表数据已损坏。 |
SecurityException | 进程没有读取包含时区信息的注册表项所需的权限。 |
TimeZoneNotFoundException |
|
SecurityException | 用户没有读取包含时区数据的注册表项所需的权限。 |
版本信息
.NET Framework 受以下版本支持:4、3.5 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1
适用平台
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。