2012-09-29 50 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。 –

相關問題