gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:56:36 25 4
gpt4 key购买 nike

我正在尝试使用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

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

最佳答案

尽管这可能有点天真,但这是不用switch语句获得缩写的一种方法:

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

我的正则表达式可能有一些不足之处。

以上对于我的时区的输出是 EST。我做了一些查找,以查看其他GMT偏移量设置的值,但是.NET在 DateTimeTimeZoneInfo之间似乎没有很好的链接,因此我不能只通过编程方式遍历它们来进行检查。对于 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

这将为我的代码产生以下结果:
PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
U+12

因此,我猜您将不得不检测 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

关于powershell - 在PowerShell中显示带有时区的当前时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com