我有以下列表:
[string]$list = ('06:33','07:29','11:54')
如何将其转换为数字类型并添加?:
预期输出:
25:56
答案1
带有值的字符串列表timespan
可以split
由默认空间转换为数组。然后ForEach-Object
使用+=
运算符将其传递给循环,同时声明将[TimeSpan]$_
数组(或时间跨度数据集)中的所有值相加到变量(例如$x
)。
TotalHours
然后可以使用和值并使用和适当的索引值Minutes
转换回字符串以获得首选输出。operators
split
电源外壳
[timespan]$x = "00:00";
$list.Split() | % { $x += [timespan]$_; };
"$(([string]$x.TotalHours).split(".")[0]):$($x.Minutes)";
输出
25:56
其他澄清细节
使用上述代码,$list.Split() | % { $x += [timespan]$_; };
运行完该行然后运行后$x
,您将看到这些填充的值,这些值用于获取最终输出。
输出值
Days : 1
Hours : 1
Minutes : 56
Seconds : 0
Milliseconds : 0
Ticks : 933600000000
TotalDays : 1.08055555555556
TotalHours : 25.9333333333333
TotalMinutes : 1556
TotalSeconds : 93360
TotalMilliseconds : 93360000
支持资源
-
TimeSpan 对象表示时间间隔(持续时间或经过的时间),以正数或负数的天数、小时数、分钟数、秒数和秒的分数来衡量。TimeSpan 结构也可用于表示一天中的时间,但前提是该时间与特定日期无关。
-
时间跨度是一个表示时间间隔的结构。在 PowerShell 中使用 TimeSpans 的方式与 .NET 类似,或者通过使用本机 PowerShell 功能可以使其变得更容易一些。
-
钥匙
strSeparator
用于分割每个字符串的字符,默认为空格(空格/换行符/制表符) -
标准别名对于 Foreach 对象:'
%
' 符号,ForEach -
运算符允许您为变量分配值,或执行数学运算:
操作员:
+= n
描述:增加值
n
(对于字符串将附加n
到字符串)
答案2
“Vomit IT - Chunky Mess” 非常简洁,但是,由于我们都喜欢在 PowerShell 中执行操作的多种方式;这里还有一些其他选项供您使用。
$TotalHours = [System.TimeSpan]::new( 0 )
([string]$list = ('06:33','07:29','11:54')).Split() |
ForEach-Object{ $TotalHours = $TotalHours.Add( $PSItem ) }
"$([Math]::Truncate($TotalHours.TotalHours)):$($TotalHpurs.Minutes)"
# Results
<#
25:56
#>
$Hour = (([TimeSpan[]]$TimeSpans = @(([string]$list = ('06:33','07:29','11:54')).Split())) |
Measure-Object -Property TotalHours -Sum)
"$([Math]::Truncate($hour.Sum)):$([Math]::Round(($Hour.Sum - [Math]::Truncate($hour.Sum)) * 60))"
# Results
<#
25:56
#>
$Hour = [Math]::Truncate(($decimalHour = [Linq.Enumerable]::Sum([decimal[]]@(
([TimeSpan[]]$TimeSpans = @(([string]$list = ('06:33','07:29','11:54')).Split())).TotalHours))))
$minute = [Math]::Round(($decimalHour - $hour) * 60)
"$($Hour):$minute"
# Results
<#
25:56
#>