PowerShell解析含缩写星期的DateTime字符串报错问题求助
解析DateTime字符串时的格式匹配问题
这个报错的核心原因是文化区域不匹配。你在调用ParseExact时第三个参数传了$null,这时候方法会使用当前PowerShell会话的默认系统文化——如果你的系统默认不是英文文化(比如中文环境),那ddd(星期缩写)和MMM(月份缩写)对应的是中文的缩写(比如"周一"、"四月"),自然匹配不上字符串里的英文缩写"Mon"和"Apr"。
举个简单的例子:如果你的系统是中文文化,当你用ddd作为格式符时,它会期望字符串里是中文的星期简称,而不是英文的"Mon",这就导致了格式不匹配,抛出"无法识别为有效DateTime"的错误。
而你去掉"Mon"和ddd后能成功解析,是因为剩下的日期时间部分都是数字格式,数字在大多数文化区域里的解析规则是一致的,不需要依赖特定的文化缩写,所以能正常工作。
解决这个问题很简单,只需要显式指定英文文化或者不依赖系统文化的InvariantCulture即可:
方法一:指定英文文化
$test = [DateTime]::ParseExact("Mon Apr 29 14:40:03 2019", "ddd MMM dd HH:mm:ss yyyy", [System.Globalization.CultureInfo]::GetCultureInfo("en-US"))
方法二:使用InvariantCulture(推荐,适用于固定格式的字符串解析)
$test = [DateTime]::ParseExact("Mon Apr 29 14:40:03 2019", "ddd MMM dd HH:mm:ss yyyy", [System.Globalization.CultureInfo]::InvariantCulture)
内容的提问来源于stack exchange,提问作者cbxxen
相关产品推荐
相关产品推荐

