我下载了我的电子邮件,并想要对它们进行排序。到他们的约会。其中一些是转发的,因此电子邮件日期是转发日期,但不是原始日期。
以下是转发电子邮件的部分内容:
+ OK 5522 octetsReturn-Path:... id lg7sm19095682wjb.9.2014.08.01.01.02.00 ...
cipher = ECDHE-RSA-RC4-SHA位= 128/128); ...
星期五,01八月2014 01:02:00 -0700(PDT)消息ID:...
日期:星期五,2014年8月1日10:02:04 + 0200来自:...
内容类型:text / plain;字符集= UTF-8; format = flowedContent-Transfer-Encoding:8bit
-------- Original-Nachricht -------- ....
基准:星期二,2013年10月22日18:18:18 +0200(CEST)Von:......
如果我尝试捕捉原始电子邮件日期(日期:星期五,2014年8月1日10:02:04 )
这场比赛和解析完美无缺!!
# **real send date** of email: Date: Fri, 01 Aug 2014 10:02:04 +0200
if ( $mail -match 'Date:\W[a-zA-Z]+\W+(\d+.+?\d{4}\W[\d:]+)\W' ) {
$a=[datetime]::ParseExact($Matches[1], "dd MMM yyyy HH:mm:ss", $null)
} else { $listOfMails.Add($a.ToString("yyyy.MM.dd-HH:mm:ss"),$mail); $n--; continue }
} else { $n--; continue }
但是如果我尝试匹配并解析电子邮件的原始日期,那么这确实会失败吗?
# the original date of the email: Datum: Tue, 22 Oct 2013 18:18:18...
if ( $mail -match 'Original-Nachricht.+?Datum\W*[A-Z][a-zA-Z]+\W+(\d+.+?\d{4}\W[\d:]+)\W*' ) {
Write-Host "Date 1: >$($Matches[1])<"
try {
$a=[datetime]::ParseExact($Matches[1], "dd MMM yyyy HH:mm:ss", $null)
} catch { $_; break }
$listOfMails.Add($a.ToString("yyyy.MM.dd-HH:mm:ss"),$mail); $n--; continue }
}
1)那场比赛是正确的($ true)!
2)写主机打印:日期1:&gt; 2013年10月22日18:18:18&lt;
3)对我来说,要解析的正确模式是:&#39; dd MMM yyyy HH:mm:ss&#39;
4)但它失败了?
5)PowerShell的错误消息:
例外..&#34;该字符串未被重新确认为有效的DateTime&#34; (我的德语翻译)
Bei C:\ Users \ cas \ Documents \ sysTools \ PC \ WindowsPowerShell \ Pop3_v2.ps1:168 Zeichen:50
+ $ a = [datetime] :: ParseExact&lt;&lt;&lt;&lt; ($匹配[1],&#34; dd MMM yyyy HH:mm:ss&#34;,$ null)
+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException
+ FullyQualifiedErrorId:DotNetMethodException
知道导致问题的原因和做法是什么? 感谢
PS只是让我添加这条消息,直接从邮箱中删除然后解析..
在我的德国电脑上找到了解决方案。 10月导致问题 - Okt解决了它。
答案 0 :(得分:2)
问题在于文化。从MSDN,当您调用DateTime.ParseExact:
如果provider为null,则使用与当前区域性对应的CultureInfo对象。
我假设您的解析失败,因为您使用的是德语CultureInfo
de-DE
。相同的解析适用于en-US
或InvariantCulture
。
PS C:\> $s = "22 Oct 2013 18:18:18"
PS C:\> $f = "dd MMM yyyy HH:mm:ss"
PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::GetCultureInfo("de-DE"))
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
At line:1 char:1
+ [datetime]::ParseExact("22 Oct 2013 18:18:18", "dd MMM yyyy HH:mm:ss", [CultureI ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::GetCultureInfo("en-US"))
Tuesday, October 22, 2013 18:18:18
PS C:\> [datetime]::ParseExact($s, $f, [CultureInfo]::InvariantCulture)
Tuesday, October 22, 2013 18:18:18
我不懂德语,所以我继续谷歌翻译,发现德语中的“十月”拼写为“Oktober”。现在,以下代码有效:
PS C:\> [datetime]::ParseExact("22 Okt 2013 18:18:18", $f, [CultureInfo]::GetCultureInfo("de-DE"))
Tuesday, October 22, 2013 18:18:18