在Powershell中创建其他时区的datetime对象

Create datetime object of other timezone in Powershell

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

在"东京标准时间",例如2012/9/29 9:00 AM,"中央太平洋标准时间"的时间是多少?

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

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

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

谢谢


这个解决方案适合我:

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

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

1
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


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

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

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

我认为你的代码似乎没问题。说实话,我不是一个PowerShell开发人员(C#对我来说),但看起来不错。