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

时间:2012-09-29 01:07:01

标签: datetime powershell timezone

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

“中央太平洋标准时间”的时间是“东京标准时间”的2012/9/29 9:00? < / p>

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

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

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

由于

2 个答案:

答案 0 :(得分:7)

这个解决方案适合我:

$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

答案 1 :(得分:1)

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

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

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

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