datetime - 我可以控制 cmdlet 显示的日期时间格式吗?

标签 datetime powershell powershell-cmdlet

我拥有一个带有 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-TableDateTime转换为您想要的字符串:

$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/

相关文章:

当 CSV 字段不存在时,Powershell 函数参数获取意外值

powershell - 使用 powershell 导出 azure db 时出现错误

php - 按日期排序并包含没有日期的记录?

java - Postgresql 和 Java 之间的 UTC 偏差一小时

sql-server - 如何将带时区的 JSON 日期转换为 SQL Server 日期时间?

powershell - 如何根据某些条件将数据 fork 到不同的管道中?

powershell - 使用获取内容或导入CSV来读取csv中第二行的第一列

javascript - 获取 HH :MM:SS time string in javascript 的一种黑客方法

xml - 比较两个 XML 文件 - 输出唯一

azure - 我在 Azure 自动化的 PowerShell 中缺少什么,导致 Start-AzureVM 无法工作?