gpt4 book ai didi

powershell - 在Powershell中添加六倍体时间

转载 作者:行者123 更新时间:2023-12-03 01:02:52 24 4
gpt4 key购买 nike

我正在使用ffprobe来获取十六进制时间,并且在修剪了最后三个(不必要的)数字后,我得到了以下格式:

#examples
0:05:51.15
11:03:15.24

有没有一种方法可以将这两个加起来,使结果为 11:09:06.39

最佳答案

您可以转换字符串以键入[timespan] ,这允许您对结果对象执行算术运算,并在输出上应用自定义格式:

PS> ([timespan] ' 0:05:51.15' + [timespan] '11:03:15.24').ToString('h\:mm\:ss\.ff')
11:09:06.39

注意:如果最终的时间跨度超过24小时,则需要做更多的工作。[1]

请注意必须如何使用 \ -ecaping将输出分隔符指定为文字
在这种情况下,更简单的 .ToString('g')本来会产生相同的输出,但仅在使用 .作为小数点分隔符的区域性中,因为标准 g格式说明符对区域性敏感。
请参阅 [timespan]::ToString() documentation以及有关 standardcustom时间跨度格式说明符的文档。

相比之下, PowerShell在解释将输入格式强制转换为 [timespan]时使用 invariant culture,其中 .是小数点分隔符;类似地,在可扩展字符串中使用 [timespan]实例 会产生文化不变的表示形式;例如。:
  • [timespan] '11:03:15.24'始终有效,而与当前区域性无关,因为不变区域性期望.作为十进制分隔符。
  • 不管当前的文化如何,
  • "$([timespan] '1' - 1)"总是产生23:59:59.9999999 [2]。

  • No Refunds No Returns所述,如果您正在处理不同格式的输入(可能来自不同文化的),则可以使用 [timespan]::Parse() / [timespan]::ParseExact() / [timespan]::TryParseExact()

    解析给定区域性的标准格式:
    [timespan]::Parse(' 0:05:51,15', 'fr-FR') # OK

    注意,作为小数点分隔符。

    如果省略区域性参数(或传递$null),则将应用当前区域性。请注意,这与使用[timespan]强制转换有什么不同,后者始终是区域性不变的(并假定.为小数点分隔符)。

    使用自定义格式进行解析:
    [timespan]::ParseExact(' 0:05:51,15'.Trim(), 'h\:mm\:ss\,ff', $null) # OK

    请注意,使用此类字面量自定义格式的永远不会区分区域性的,因为必须将所有分隔符指定为-转义的文字量(例如\:),因此$null作为区域性参数(IFormatProvider)传递。
    相反,仅通过对文化敏感的标准格式说明符gG,传递特定区域性才有意义。

    使用具有文化意识的自定义格式进行解析:

    如果您不知道在运行时将执行哪种区域性,但是您想结合使用自定义格式来尊重该区域性的十进制分隔符,则需要动态地将当前区域性的十进制分隔符嵌入您的自定义格式字符串中:
    $tsText = ' 0:05:51.15'
    [timespan]::ParseExact($tsText.Trim(),
    ('h\:mm\:ss\{0}ff' -f [cultureinfo]::CurrentCulture.NumberFormat.NumberDecimalSeparator),
    $null
    ) # OK in cultures that use "." as the decimal separator

    [1] hhh仅反射(reflect)输入时间范围内整天未包括的小时数。为了同样反射(reflect)天数,请在前面加上d\.之类的内容-没有格式说明符可以表示多天的总小时数,但是您可以使用通用字符串格式来实现这一点-但是请注意,您还需要自定义解析代码,以便将结果字符串转换回[timespan]实例:$ts = [timespan] ' 1:05:51.15' + [timespan] '23:03:15.24''{0}:{1:mm\:ss\.ff}' -f [Math]::Floor($ts.TotalHours), $ts
    [2]在.NET级别上,在对象上调用.ToString()通常会产生对文化敏感的表示形式(如果类型支持的话),但是对于[timespan],输出恰好是文化不变的。相比之下,PowerShell在强制转换和字符串插值中显式地使用了幕后的不变文化,因此"$var"$var.ToString()可能不会产生相同的表示形式-有关详细信息,请参见this answer

    关于powershell - 在Powershell中添加六倍体时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473811/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com