我拥有一个带有 DateTime 属性的 cmdlet,该属性表示服务器上事件的时间戳。该 cmdlet 读取服务器上的日志并输出一些信息。由于一堆事件可能在短时间内发生,因此毫秒精度对于输出的用户来说非常重要。
但是,当使用 format-list 或 format-table 时,输出仅显示秒,例如2015 年 4 月 15 日下午 5:31:30
。我更愿意使用 fff time format相反。
我知道实际数据没有四舍五入,因为如果我查询 DateTime 值的 Millisecond 属性,我会看到正确的值。例如,对于给定的输出 $event
,如果我的日志行的时间戳为 2015-04-16T00:31:30.525Z
,则 $event.Timestamp。毫秒
返回 525。
我可以在 cmdlet 中执行某些操作来指定 DateTime 应以毫秒显示吗?例如,当用户键入:
> Get-LogInfo | ft
我想默认显示:
Timestamp EventData
--------- -------
4/15/2015 17:31:28.525 (data)
我也希望格式列表有类似的行为。理想情况下,cmdlet 用户无需执行任何额外工作即可查看毫秒。
最佳答案
您可以要求Format-Table
将DateTime
转换为您想要的字符串:
$t = New-Object psobject -Property @{Text ="test"; dt = (Get-Date)}
$t | ft Text,@{expression={"{0:HH:mm:ss.fff}" -f $_.dt};label="time with milliseconds"} -AutoSize
打印:
Text time with milliseconds
---- ----------------------
test 18:08:51.725
或者,您可以设置当前线程的长时间模式以显示毫秒:
$t = New-Object psobject -Property @{Text ="test"; dt = (Get-Date)}
[System.Threading.Thread]::CurrentThread.CurrentCulture.DateTimeFormat.LongTimePattern = 'HH:mm:ss.fff'
$t | ft * -AutoSize
打印:
Text dt
---- --
test 4/21/2015 10:24:08.877
显然,后者会影响所有日期到字符串的转换,因此请小心使用。
关于datetime - 我可以控制 cmdlet 显示的日期时间格式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759936/