如何将字符转换为小时类型并添加?

如何将字符转换为小时类型并添加?

我有以下列表:

[string]$list = ('06:33','07:29','11:54')

如何将其转换为数字类型并添加?:

预期输出:

25:56

答案1

带有值的字符串列表timespan可以split由默认空间转换为数组。然后ForEach-Object使用+=运算符将​​其传递给循环,同时声明将[TimeSpan]$_数组(或时间跨度数据集)中的所有值相加到变量(例如$x)。

TotalHours然后可以使用和值并使用和适当的索引值Minutes转换回字符串以获得首选输出。operatorssplit

电源外壳

[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 对象表示时间间隔(持续时间或经过的时间),以正数或负数的天数、小时数、分钟数、秒数和秒的分数来衡量。TimeSpan 结构也可用于表示一天中的时间,但前提是该时间与特定日期无关。

  • 在 PowerShell 中格式化 TimeSpan

    时间跨度是一个表示时间间隔的结构。在 PowerShell 中使用 TimeSpans 的方式与 .NET 类似,或者通过使用本机 PowerShell 功能可以使其变得更容易一些。

  • 定义 PowerShell 数据类型

  • 新时间跨度

  • PowerShell 运算符 $( ) @( ) :: &

  • 分裂()

    钥匙

    strSeparator 用于分割每个字符串的字符,默认为空格(空格/换行符/制表符)

  • ForEach 对象

    标准别名对于 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
#>

相关内容