我正在尝试使用时区显示系统上的本地时间。如何在任何系统上以最简单的方式显示此格式的时间?:
时间:美国东部时间上午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
我希望能够显示时间,而不依赖于简单的逻辑,但能够给予任何系统上的本地时区。
8条答案
按热度按时间yacmzcpb1#
虽然这可能有点......幼稚,但这是一种不用switch语句就可以获得 an 缩写的方法:
我的正则表达式可能有些地方需要改进。
上面的输出对于我的时区是
EST
。我做了一些研究,因为我想看看其他GMT偏移设置的值是什么,但.NET似乎没有很好的DateTime
和TimeZoneInfo
之间的链接,所以我不能用编程的方式来检查它们,这可能对StandardName
返回的一些字符串不起作用。**编辑:**我做了一些进一步的调查,手动更改计算机上的时区以检查此问题,
GMT+12
的TimeZoneInfo
如下所示:它会为我的代码生成以下结果:
因此,我猜您必须检测
StandardName
看起来是一组单词还是只是偏移量指定,因为它没有标准名称。美国以外问题较少的公司似乎遵循三个字的格式:
jhdbpxl92#
您应该研究一下
DateTime
format strings,虽然我不确定它们是否能够返回时区简称,但是您可以很容易地获得UTC的偏移量。这将返回:
34gzjxbg3#
不愿意定义另一种日期时间格式!使用现有的格式,如RFC 1123。甚至还有PowerShell快捷方式!
2012年6月14日星期四格林尼治标准时间16:44:18
参考编号:* Get-Date *
carvr3hs4#
这是一个更好的答案:
输出日期:2017年3月20日11:55:55 PM
disho6za5#
我不知道有哪个对象可以帮你完成这个工作,你可以把这个逻辑封装在一个函数中:
或者甚至取时区id的首字母:
rvpgvaaj6#
我只是组合了几个脚本,终于能够在我的域控制器中运行脚本了。
该脚本为连接到域中的所有机器提供时间和时区的输出。我们的应用服务器出现了一个主要问题,使用该脚本交叉检查时间和时区。
23c0lvtd7#
俄罗斯、法国、挪威、德国:
俄罗斯时区的输出:22时47分27秒19秒21秒+03秒00秒
其他的-只要更改代码。
niwlg2el8#
如果您有互联网连接... API
在荷兰...
输出:CET