这是一个很好的解决方案。
并且,如果您正在寻找带有输入属性(您的特定开始日期/时间)的StopWatch函数之类的东西,请使用StopWatch名称将代码放入函数中。
function StopWatch ([datetime]$StartDate) {
do {
write-host "$((New-TimeSpan $StartDate (get-date)).tostring())`r" -NoNewline
sleep 1
} while ($true)
}
C:\PS>StopWatch 1.1.2019
C:\PS>StopWatch '1.1.2019 12:20'
,
这是完成任务的另一种方法。 [咧嘴]它的作用...
- 使用
[datetime]::Now
来获取当前时间
这明显比Get-Date
快。
- 将代码捆绑到具有标准名称格式的函数中
- 使用
foreach
代替for
第一个比第二个要快,因为它执行一次测试,然后简单地遍历结果范围,而不是每次通过测试。
- 使用直接日期时间数学而不是较慢的
New-TimeSpan
。
- 从当前时间减去开始时间
您的代码给了您负面的时间间隔。我想您真的要“多久了?”而不是“开始日期是多远?”。
- 使用
Start-Sleep
cmdlet的全名
最好使用任何cmdlet /函数/参数的全名,以便您可以轻松扫描代码。
这是代码...
function Get-TimerSeconds
{
[CmdletBinding()]
Param (
[datetime]
$StartDate = [datetime]::Now,[int]
$TotalSeconds = 10
)
begin {}
process
{
foreach ($Second in 1..$TotalSeconds)
{
([datetime]::Now - $StartDate).ToString()
Start-Sleep -Seconds 1
}
}
end {}
}
被Get-TimerSeconds
...
截断的输出
00:00:00
00:00:01.0170000
...
00:00:08.1150000
00:00:09.1290000
被Get-TimerInfo -StartDate '2019-11-01 21:31:41' -TotalSeconds 15
...
截断的输出
3.13:23:06.4170000
3.13:23:07.4320000
...
3.13:23:19.6000000
3.13:23:20.6150000
本文链接:https://www.f2er.com/3159590.html