zeros Asked: 2022-10-22 03:45:35 +0800 CST2022-10-22 03:45:35 +0800 CST 2022-10-22 03:45:35 +0800 CST 如何将字符转换为小时类型并添加? 772 我有以下列表: [string]$list = ('06:33','07:29','11:54') 如何将其转换为数字类型并添加?: 预期输出: 25:56 powershell date-time 2 个回答 Voted Best Answer Vomit IT - Chunky Mess Style 2022-10-22T05:08:24+08:002022-10-22T05:08:24+08:00 带有值的字符串列表timespan可以split默认为空格并转换为数组。然后使用运算符将其传递给ForEach-Object循环,+=同时声明将[TimeSpan]$_数组中的所有值(或时间跨度数据集)相加到一个变量(例如$x)。 然后可以使用 and 值并将其转换回字符串,使用TotalHoursand具有适当的索引值以获得首选输出。Minutesoperatorssplit 电源外壳 [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 中格式化 TimeSpan TimeSpan是一个表示时间间隔的结构。在 PowerShell 中使用 TimeSpan 可能与 .NET 类似,或者可以通过使用本机 PowerShell 功能变得更容易一些。 定义 PowerShell 数据类型 新时间跨度 PowerShell 运算符 $( ) @( ) :: & 分裂() 钥匙 strSeparator 用于分割每个字符串的字符,默认为空格(空格/换行符/制表符) ForEach-对象 Foreach-Object 的标准别名%:' ' 符号,ForEach 变量和运算符 运算符允许您为变量赋值,或执行数学运算: 操作员: += n 说明:增加值n(对于字符串将追加n到字符串) postanote 2022-10-22T11:29:54+08:002022-10-22T11:29:54+08:00 “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 #>
带有值的字符串列表
timespan
可以split
默认为空格并转换为数组。然后使用运算符将其传递给ForEach-Object
循环,+=
同时声明将[TimeSpan]$_
数组中的所有值(或时间跨度数据集)相加到一个变量(例如$x
)。然后可以使用 and 值并将其转换回字符串,使用
TotalHours
and具有适当的索引值以获得首选输出。Minutes
operators
split
电源外壳
输出
其他澄清细节
使用上面的代码,在运行该行
$list.Split() | % { $x += [timespan]$_; };
然后运行之后$x
,您将看到填充的这些值用于获取最终输出。输出值
支持资源
时间跨度结构
在 PowerShell 中格式化 TimeSpan
定义 PowerShell 数据类型
新时间跨度
PowerShell 运算符 $( ) @( ) :: &
分裂()
ForEach-对象
变量和运算符
“Vomit IT - Chunky Mess”非常简洁,但是,因为我们都喜欢在 PowerShell 中做事的多种方式;这里有几个其他选项供您破解。