提问人:back_ache 提问时间:2/23/2023 最后编辑:mklement0back_ache 更新时间:7/25/2023 访问量:142
如何将包含 monthname 的日期字符串转换为 datetime?
how do you convert a date string that contains a monthname to a datetime?
问:
我确信这很简单,但搜索引擎引导我回答了除此以外的所有问题:-(
我有一个字符串“13 February 2023 13:45:40”,我需要将其转换为日期时间,以便我可以进行比较
你是怎么选择这样的约会的?它是否需要一个比我使用 parseextract 或正则表达式更聪明的专业模块?
谢谢哦,聪明的人
答:
完整月份名称的日期格式说明符是 ,将其与 :MMMM
[datetime]::ParseExact()
$dateString = "13 February 2023 13:45:40"
$formatString = 'dd MMMM yyyy HH:mm:ss'
$cultureInfo = [cultureinfo]::GetCultureInfo('en-US')
[datetime]::ParseExact($dateString, $formatString, $cultureInfo)
如果需要分析其他语言中的时间戳,请替换为相应的区域性标识符:en-US
$dateString = "13 février 2023 13:45:40"
$formatString = 'dd MMMM yyyy HH:mm:ss'
$cultureInfo = [cultureinfo]::GetCultureInfo('fr-FR')
[datetime]::ParseExact($dateString, $formatString, $cultureInfo)
13 February 2023 13:45:40
使用一种字符串格式,该格式被固定区域性直接识别为标准格式(一种用于编程用途的不可变区域性,基于区域性,但与区域性不同)。[cultureinfo]::InvariantCulture
en-US
在 PowerShell 中使用
[datetime]
强制转换始终使用固定区域性,因此,无论当前区域性是什么,都可以安全地使用具有该区域性识别的标准格式的强制转换。- 注意:将此类字符串传递给
Get-Date
的参数是不安全的,因为它们首先受到当前区域性规则的解释,因为 PowerShell 的参数绑定中不幸的不一致不会被修复,为了向后兼容性 - 请参阅 GitHub 问题 #6989-Date
- 注意:将此类字符串传递给
因此:
[datetime] "13 February 2023 13:45:40"
要处理固定区域性无法识别的格式,请执行以下操作:
如果它们是当前/特定区域性识别的标准格式,请使用
[datetime]::P arse()
:用于基于当前区域性进行分析。
[datetime]::Parse($string)
例如,使用基于给定区域性的解析,例如本例中的 (French, France)。
[datetime]::Parse($string, [cultureinfo] 'fr-FR')
fr-FR
否则,需要基于传递给
[datetime]::P arseExact()
的自定义格式字符串进行自定义解析,如 Mathias 的有用答案所示。- 注意:要基于固定区域性执行自定义解析,请使用
(sic) 作为参数。[cultureinfo] ''
provider
- 注意:要基于固定区域性执行自定义解析,请使用
上述两种方法还具有 -prefixed variants,它们通过返回值指示是否可以解析,并接受可选参数以接收转换结果。
Try
[bool]
[ref]
举几个例子,它们都是等效的:
# The input string.
$dateString = '13 February 2023 13:45:40'
# OK - the [datetime] cast automatically recognizes the format
# in the context of the *invariant* culture.
[datetime] $dateString
# Ditto, referencing the invariant culture explicitly.
[datetime]::Parse($dateString, [cultureinfo]::InvariantCulture)
# Ditto, with an explicit format string, using [cultureinfo] ''
# as a more concise alternative to [cultureinfo]::InvariantCulture
[datetime]::ParseExact($dateString, 'dd MMMM yyyy HH:mm:ss', [cultureinfo] '')
# .Try*() variants.
# Initialize the result variable.
# For the method-overload resolution below to work as expected,
# be sure to type-constrain it as [datetime].
[datetime] $dtResult = 0
# .TryParse()
$ok = [datetime]::TryParse(
$dateString,
[cultureinfo]::InvariantCulture,
[ref] $dtResult
)
# Result
[pscustomobject] @{
CouldParse = $ok
Result = $dtresult
}
# .TryParseExact()
$ok = [datetime]::TryParseExact(
$dateString,
'dd MMMM yyyy HH:mm:ss',
[cultureinfo] '',
'None', # [System.Globalization.DateTimeStyle]::None
[ref] $dtResult
)
# Result
[pscustomobject] @{
CouldParse = $ok
Result = $dtresult
}
评论
Get-Date "13 February 2023 13:45:40"
[datetime]"13 February 2023 13:45:40"