我的脚本存在一些问题。这里的最后阶段是设置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]);
答案 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
,它将使用系统的时区。这实际上是默认,因此您可能根本不需要做任何事情。