我想从日志文件中获取日期。
日志文件中的文本。
错误代码。 200105.简单文本等等------------->它的日期应为2020 Jan 05
错误代码。 2000207.简单文本等等------------->它的日期应为2020 Feb 07
我尝试了一下,但是没有用。
获取日期“ 200105”-格式为“ y-m-d”,但无效。
我也尝试“ 200105” |日期,但仍然相同
此方法确实有效[datetime] :: ParseExact(“ 120105”,“ y.m.d”,$ null),但是我如何只获取日期却忽略所有其他文本
答案 0 :(得分:0)
根据documentation,如果Get-Date从区域设置中识别出日期格式,则它将字符串转换为日期。
例如,在英国,它识别Get-Date“ 2020/03/21”,但不能识别Get-Date“ 20200321”
格式字符串仅用于格式化当前日期。
这有效:格式字符串中的字符数代表输入的大小(它与日和年中的数字数匹配-几个月比较复杂),M代表月(m代表分钟)。
[78.90399933 nan nan]
[75.04682159 8.51200104 8.16529846]
[78.07499695 nan nan]
[81.23899841 9.76999664 9.13999939]
[80.60099792 8.34100342 8.07700348]
[79.50131226 nan nan]
[72.7118988 4.44860077 7.51000214]
[79.55729675 nan nan]
[74.17259979 5.2460022 7.83300018]
[74.11289978 4.3219986 7.40000153]
[79.62058258 nan nan]
2020年3月21日,星期六,00:00:00
答案 1 :(得分:0)
如果要使用更短的版本,可以通过如下方式将输出进行管道传递
$date = [datetime]::ParseExact($text2, "y.M.d", $null)
$date | Get-Date -Format dd-MMMM-yyyy
或
$date.ToString("yyyy MMMM dd")
答案 2 :(得分:0)
您的第二个示例2000207
无效,因为其中有多余的0
。
我将在这里使用TryParseExact
方法来查看您是否实际上是可解析的日期时间字符串。
$logLine = 'Error code. 200105. Simple text and so on'
if ($logLine -match '^Error code\s*\.?\s*(\d{6})') {
$date = Get-Date # any valid DateTime object will do
if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) {
# do something with the date found. For demo, just output in the console
"Found a date: $date"
}
}
您可能正在逐行读取日志文件,例如:
Get-Content -Path 'TheLogFile' | ForEach-Object {
if ($_ -match '^Error code\s*\.?\s*(\d{6})') {
$date = Get-Date # any valid DateTime object will do
if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) {
# do something with the date found. For demo, just output in the console
"Found a date: $date"
}
}
}