2014-01-08 64 views
1

與我的腳本有一些問題。這裏的最終目的是設置Windows系統時間,然後將時區轉換爲UTC偏移量以導入到MySQL中,並在此處設置時區。Powershell:如何在會話期間重新加載Windows系統時間信息?

問題是服務器默認設置爲00:00。當$ timezone =「東部標準時間」時,我運行這些命令,並且$ offset仍然返回00:00,而不是-05:00。 $時間也反映00:00。如果我打開一個新的PS窗口並運行$ time =行,我會得到正確的值;不過,我需要在最初的窗口中執行此操作。提前致謝。

tzutil /s $timezone; 

$time = [System.TimeZoneInfo]::Local|select -expandproperty BaseUtcOffset; 
$DateParts = ([string]$time).split(":"); 
$offset = ($DateParts[0]+":"+$DateParts[1]); 

回答

0

,而不是試圖重裝系統時間在當前會話中,它可能是簡單的只使用tzutil再次可靠地獲取最新更新的系統時間。

下面是一個例子,我們獲取所有系統時區,然後篩選tzutil /g的輸出,其中時區的ID與我們當前的系統時區匹配。你會想要做這樣的事情,因爲當前會話不知道變化。

例子:

PS C:\> $timezone = "Eastern Standard Time" 
PS C:\> tzutil /s $timezone 
PS C:\> [System.TimeZoneInfo]::GetSystemTimeZones() | where { $_.ID -like (tzutil /g) } 

Id       : Eastern Standard Time 
DisplayName    : (UTC-05:00) Eastern Time (US & Canada) 
StandardName    : Eastern Standard Time 
DaylightName    : Eastern Daylight Time 
BaseUtcOffset    : -05:00:00 
SupportsDaylightSavingTime : True 

從那裏,你可以提取像之前的從BaseUtcOffset屬性偏移。

0

這不是一個好主意。 Windows標識符「東部標準時間」是美國東部時區的查找鍵,由東部標準時間和東部夏令時組成。通過-5:00只在標準時間內有效。你需要在白天得到-4:00。

MySQL使用IANA/Olson時區標識符。而不是「東部標準時間」,您可以通過「America/New_York」。 Unicode CLDR提供了轉換,您可以使用Noda時間,as shown here在.Net(也可能是Powershell)中執行轉換。

但所有這些都是oveverkill。除非你想偏離系統時區的,否則你不需要告訴MySQL改變它的時區。評論the docs for MySQL time zone support。很明顯,您只需通過SYSTEM即可使用系統的時區。這實際上是默認,所以你可能根本不需要做任何事情。

相關問題