Powershell:如何在会话期间重新加载Windows系统时间信息?

时间:2014-01-08 13:11:35

标签: windows datetime powershell timezone

我的脚本存在一些问题。这里的最后阶段是设置Windows系统时间,然后将时区转换为UTC偏移量以导入MySQL并在那里设置时区。

问题是默认情况下服务器设置为00:00。当$ timezone ="东部标准时间"时,我运行这些命令,$ offset仍然返回00:00,而不是-05:00。 $ time也反映了00:00。如果我打开一个新的PS窗口并运行$ time =行,我会得到正确的值;但是,我需要在初始窗口中执行此操作。提前谢谢。

tzutil /s $timezone;

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

2 个答案:

答案 0 :(得分: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属性中提取偏移量。

答案 1 :(得分:0)

这不是一个好主意。 Windows标识符“东部标准时间”是美国东部时区的查找键,它由东部标准时间和东部夏令时组成。通过-5:00仅在标准时间内有效。你需要在白天时间-4:00。

MySQL使用IANA / Olson时区标识符。而不是“东部标准时间”,你会通过“America / New_York”。 Unicode CLDR提供了转换,您可以使用Noda Time as shown here在.Net(也可能是Powershell)中进行转换。

但所有这些都是过分的。除非您想要偏离系统时区,否则您无需告诉MySQL更改其时区。查看the docs for MySQL time zone support。很明显,你可以通过SYSTEM,它将使用系统的时区。这实际上是默认,因此您可能根本不需要做任何事情。