PowerShell中如何将字符串转换并显示为24小时制日期?
解决PowerShell中Datetime对象24小时制显示问题
你的问题核心在于对Datetime对象的存储和显示逻辑理解有误:Datetime对象本身只存储时间的数值信息,并不保存显示格式。当你把格式化后的字符串再次转换回[datetime]类型时,之前的格式设置就被丢弃了,PowerShell会用系统默认的日期格式来输出这个对象。
先分析你代码里的问题
$fromtime = '2018-03-28,23:37:50' # 这里你先把字符串转成Datetime,再ToString得到24小时制字符串 # 但紧接着又把这个字符串转回了Datetime类型,等于白做了格式转换 [datetime]$fromtime24hrFormat = ([datetime]$fromtime).ToString("yyyy-MM-dd,HH:mm:ss") $fromtime24hrFormat # 输出的是Datetime对象的默认长格式
给你三个可行的解决方案
方案1:直接保留格式化后的字符串(最简单)
如果你的需求只是得到24小时制格式的文本,不需要Datetime对象,直接保留ToString的结果即可:
$fromtime = '2018-03-28,23:37:50' # 转成Datetime后直接格式化并保存为字符串 $fromtime24hrString = ([datetime]$fromtime).ToString("yyyy-MM-dd,HH:mm:ss") $fromtime24hrString # 输出:2018-03-28,23:37:50
方案2:保留Datetime对象,输出时指定格式
如果需要保留Datetime对象用于后续操作,只需要在输出的时候指定显示格式:
$fromtime = '2018-03-28,23:37:50' $fromtimeDateTime = [datetime]$fromtime # 方法1:用ToString指定格式 $fromtimeDateTime.ToString("yyyy-MM-dd,HH:mm:ss") # 方法2:用PowerShell格式运算符(更灵活) "{0:yyyy-MM-dd,HH:mm:ss}" -f $fromtimeDateTime
方案3:临时修改会话的日期显示格式(全局生效)
如果希望当前PowerShell会话中所有Datetime对象都默认以24小时制显示,可以修改当前文化的日期格式:
# 修改当前会话的日期时间格式 $culture = Get-Culture $culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd" $culture.DateTimeFormat.LongTimePattern = "HH:mm:ss" $culture.DateTimeFormat.FullDateTimePattern = "yyyy-MM-dd,HH:mm:ss" Set-Culture $culture # 之后输出Datetime对象就会用新格式 $fromtime = '2018-03-28,23:37:50' $fromtimeDateTime = [datetime]$fromtime $fromtimeDateTime # 输出:2018-03-28,23:37:50
内容的提问来源于stack exchange,提问作者Samselvaprabu
相关产品推荐
相关产品推荐

