繁体   English   中英

如何将PowerShell日期时间字符串从24小时格式转换为12小时格式?

[英]How do I convert a PowerShell datetime string from 24 hour to 12 hour format?

所需的PowerShell脚本中的实际行是:

$tsd = [datetime]::ParseExact($TSDiff,'yyyyMMddhhmmsstt',$null)

但是使用的$TSDiff变量的时间表示为不带AM / PM的时间:

20171023212800

这是一种24小时格式,其中11 pm由23表示。它是通过FTP请求检索的,该请求似乎仅返回24小时格式的字符串,而没有AM / PM。

分解来看,以下PowerShell命令有效:

[datetime]::ParseExact("20171023092800",'yyyyMMddhhmmss',$null)

但是以下PowerShell命令不起作用:

[datetime]::ParseExact("20171023212800",'yyyyMMddhhmmss',$null)

第二行不起作用的原因很清楚。 小时数字采用24小时格式,如本文$TSDiff列出的$TSDiff

PowerShell中是否有一种简单的方法将字符串20171023212800转换为20171023092800PM

格式化日期和时间

[...]

  • h%h -12小时制中的小时。 单位小时不会有前导零。 如果格式模式未与其他格式模式组合,请指定%h
  • hh -12小时制中的小时。 单位小时数的前导零。
  • H%H -24小时制中的小时。 单位小时不会有前导零。 如果格式模式未与其他格式模式组合,请指定%H
  • HH -24小时制中的小时。 单位小时数的前导零。

[...]

在格式说明符中将日期时间字符串转换为带有hh的12小时格式的字符串时,它将转换为带有HH的24小时字符串,例如:

[datetime]::ParseExact("20171023212800",'yyyyMMddHHmmss',$null)

采用:

# Method 1. Use HH for 24-hour format like TessellatingHeckler proposes
[datetime]::ParseExact("20171023212800", 'yyyyMMddHHmmss', $null)


# Method 2. If you are not sure your string is
# date, use TryParse with the same format
[datetime]$dirDate = New-Object DateTime

if ([DateTime]::TryParseExact(
                  '20171023212800',
                  'yyyyMMddHHmmss',
                  [System.Globalization.CultureInfo]::InvariantCulture,
                  [System.Globalization.DateTimeStyles]::None,
                  [ref]$dirDate))
{
    $dirDate
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM