在PowerShell中将字符串转换为24小时时间格式

4

我遇到了将一些短时间字符串转换为24小时制时间格式的问题。

在脚本中,我有以下foreach循环来解析csv中每行数据:

Foreach ($Line in $Data) {
    $command.CommandText=$SQLCommandPre+ `
        "'"+$line."Reference" `
        +"','"+$line."Date" `
        +"','"$line."Business Hour".SubString(0,8) `
        +"','"+"{0:f2}" -f ($line."Total"/2) `
    +"','"+"{0:f0}" -f ($line."Number"/2) `
    +"')"
    [void] $command.ExecuteNonQuery()
}

例如,我的源数据是:
0101,8/19/2012,12:00 AM - 12:59 AM,241.83,21

目前脚本只获取了12am,但我需要将其转换为00:00。我尝试使用以下方法,但对PowerShell创建的查询没有影响:

"{0:HH:mm}" -f ($line."Business Hour".SubString(0,8))

我一直无法找到其他方法来达成我的目标。


你只是想获取时间,例如下午2点,并将其转换为14:00吗? - justinf
2个回答

7

在尝试格式化之前,确保将获取的字符串转换为[DateTime]对象,例如:

C:\PS> "{0:HH:mm}" -f [datetime]'12:00 AM'
00:00

谢谢,我以为我已经尝试过这个了,但我猜我打错了。 - jjamesjohnson

0

有多种方法可以实现这个目标。以下是我可能会采用的方法:

$test = '0101,8/19/2012,12:00 AM - 12:59 AM,241.83,21'
([dateTime]$test.Split(',')[2].Split('-')[0]).ToString('HH:mm')

如果你想的话,可以调整如何获取子字符串。在这种情况下,我更喜欢使用split而不是.SubString(),因为它对字符串长度的变化更加容忍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接