在PowerShell中显示带时区的当前时间

Ken*_*n J 11 powershell time timezone

我正在尝试使用TimeZone在我的系统上显示本地时间.如何以最简单的方式在任何系统上以这种格式显示时间?:

时间:美国东部时间上午8:00:34

我目前正在使用以下脚本:

$localtz = [System.TimeZoneInfo]::Local | Select-Object -expandproperty Id
if ($localtz -match "Eastern") {$x = " EST"}
if ($localtz -match "Pacific") {$x = " PST"}
if ($localtz -match "Central") {$x = " CST"}
"Time: " + (Get-Date).Hour + ":" + (Get-Date).Minute + ":" + (Get-Date).Second + $x
Run Code Online (Sandbox Code Playgroud)

我希望能够在不依赖简单逻辑的情况下显示时间,但能够在任何系统上提供本地时区.

Shi*_*umi 10

虽然这可能有点天真,但这是获得没有switch语句缩写的一种方法:

[Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
Run Code Online (Sandbox Code Playgroud)

我的正则表达式可能会留下一些不足之处.

我的时区的上述输出是EST.我做了一些看,因为我想知道其他GMT偏移设置的价值是什么,但.NET似乎没有DateTime和之间的非常好的链接TimeZoneInfo,所以我不能只是以编程方式运行它们全部检查.对于某些返回的字符串,这可能无法正常工作StandardName.

编辑:我做了一些更多的研究改变了我的计算机上的时区手动检查这个和TimeZoneInfoGMT+12如下所示:

PS> [TimeZoneInfo]::Local

Id                         : UTC+12
DisplayName                : (GMT+12:00) Coordinated Universal Time+12
StandardName               : UTC+12
DaylightName               : UTC+12
BaseUtcOffset              : 12:00:00
SupportsDaylightSavingTime : False
Run Code Online (Sandbox Code Playgroud)

这为我的代码产生了这个结果:

PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
U+12
Run Code Online (Sandbox Code Playgroud)

所以,我猜你必须检测StandardName看起来是一组单词还是只是偏移指定,因为它没有标准名称.

美国境外问题较少的人似乎遵循三字格式:

PS> [TimeZoneInfo]::Local

Id                         : Tokyo Standard Time
DisplayName                : (GMT+09:00) Osaka, Sapporo, Tokyo
StandardName               : Tokyo Standard Time
DaylightName               : Tokyo Daylight Time
BaseUtcOffset              : 09:00:00
SupportsDaylightSavingTime : False

PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
TST
Run Code Online (Sandbox Code Playgroud)


Rob*_*ati 6

你应该研究DateTime格式字符串.虽然我不确定他们是否可以返回时区短名称,但您可以轻松获得UTC的偏移量.

$formatteddate = "{0:h:mm:ss tt zzz}" -f (get-date)
Run Code Online (Sandbox Code Playgroud)

返回:

8:00:34 AM -04:00
Run Code Online (Sandbox Code Playgroud)


Col*_*nic 5

不愿意定义另一种日期时间格式!使用现有的,例如RFC 1123。甚至还有一个 PowerShell 快捷方式!

Get-Date -format r
Run Code Online (Sandbox Code Playgroud)

2012 年 6 月 14 日星期四 16:44:18 GMT

参考:获取日期

  • 无论您的时区如何,您都会获得 GMT,它是硬编码的 - (Get-Culture).DateTimeFormat.RFC1123Pattern, (7认同)
  • 需要注意的是,这不是很准确:目前在真正为“BST”(格林威治标准时间前一小时)时报告“格林威治标准时间”。 (6认同)
  • -format u 为您提供正确的世界时,'-g' API 已损坏 IMO (2认同)