2012-09-29 43 views
3

基本上我试图找到一种方法来将特定时区的日期时间转换为其他时区,同时也考虑了夏令时。例如在PowerShell中创建其他时区的日期时间对象

在“东京标准时间”的2012/9/29 9:00 AM的“中央太平洋标准时间”是什么时间?

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

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

我在想,如果我可以创建一个从本地机器不同的时区的DateTime对象,然后我就可以用我找到了解决方案,或将有其他的方法可以做到我需要什么?

谢谢

回答

6

该解决方案的工作很适合我:

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

然后,您可以操纵$ csttime变量就像一个DateTime对象:

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

+0

非常感谢!这正是我需要的。这是为了增强我的项目。 –

1

使用时区可能会非常棘手。感谢上帝在.NET 3.5和4.0中添加的更新。我曾在几个时区项目上工作,如果没有迭代注册表并构建自己的TimeZones列表,几乎是不可能的。 http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx

只是提防可能无法从Windows Update自动更新系统可能有:

现在你可以使用的TimeZoneInfo类(你似乎很熟悉)获得时区列表与完全最新的系统不同的时区。微软在需要时推出时区更新。

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

+0

谢谢。这些信息非常有用。我正在查看Timezoneinfo类中的方法。 FindSystemTimeZoneById方法看起来像我需要的一个。再次感谢。 –

+0

嗯......文档说ConvertTime方法实际上接受源和目标时区。但是,当我尝试[system.timeZoneInfo] :: ConvertTime($ curtime,$ fromtimezone,$ totimezone),我得到错误:调用带有“3”参数的“ConvertTime”的异常:“转换无法完成因为提供的DateTime没有正确设置Kind属性,例如,当Kind属性是DateTimeKind.Local时,源时区必须是TimeZoneInfo.Local。 –

相关问题