6

基本上我正在尝试找到一种方法将特定时区的日期时间转换为其他时区,同时也考虑 DST。例如

例如,“东京标准时间”的 2012 年 9 月 29 日上午 9:00,“中太平洋标准时间”的时间是几点?

我在互联网上找到了一些将本地机器时间转换为其他时区的解决方案。

$ToTimeZoneObj = [system.timezoneinfo]::GetSystemTimeZones() | Where-Object {$_.id -eq $ToTimeZone}
$TargetZoneTime = [system.timezoneinfo]::ConvertTime($datetime, $ToTimeZoneObj)

我在想如果我可以创建一个与本地机器不同的时区的日期时间对象,然后我可以使用我找到的解决方案,还是有其他方法来做我需要的?

谢谢

4

2 回答 2

11

这个解决方案对我很有效:

$cstzone = [System.TimeZoneInfo]::FindSystemTimeZoneById("Central Standard Time")
$csttime = [System.TimeZoneInfo]::ConvertTimeFromUtc((Get-Date).ToUniversalTime(), $cstzone)

然后,您可以像操作 datetime 对象一样操作 $csttime 变量:

Get-Date $csttime.AddHours(-1) -f "MM\dd\yyyy HH:mm:ss"

参考资料: http: //msdn.microsoft.com/en-us/library/system.timezoneinfo.converttimefromutc (v=vs.110 ).aspx http://technet.microsoft.com/en-us/library/ee692801。 aspx

于 2013-11-20T16:15:58.973 回答
1

使用 TimeZones 可能会变得非常棘手。感谢上帝他们在 .NET 3.5 和 4.0 中添加的更新。我参与了几个时区项目,如果不迭代注册表并构建自己的时区列表,在 2.0 中几乎是不可能的。

现在,您可以使用 TimeZoneInfo 类(您似乎很熟悉)获取 TimeZone 列表:http: //msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx

请注意,可能无法从 Windows Update 自动更新的系统可能与完全最新的系统具有不同的时区。Microsoft 会在需要时推出时区更新。

我认为您的代码似乎还可以。老实说,我不是 PowerShell 开发人员(对我来说是 C#),但它看起来不错。

于 2012-09-29T01:18:03.527 回答