【发布时间】:2022-12-10 21:00:22
【问题描述】:
我正在尝试解析邮件标题。我正在尝试通过给它 RFC2822 strings 来解析 Chrono 的日期。问题是它无法解析格式为2 Nov 2021 14:26:12 +0000 (UTC) 的字符串,问题似乎是最后一部分 (UTC)。我怎样才能让 Chrono 也解析这些字符串?
use chrono::prelude::DateTime; // 0.4.19
use regex::Regex; // 1.6.0
let date = "2 Nov 2021 14:26:12 +0000"; // does work
let date = "2 Nov 2021 14:26:12 +0000 (UTC)"; // does not work
// regex parses "[+-]dddd (www)" => " "[+-]dddd"
let re = Regex::new(r"([+-]?\d{4}) \(\w+\)$").unwrap();
let date = DateTime::parse_from_rfc2822(
&re.replace(date_rfc2822_str, "$1")
)
.unwrap()
);
我可以使用正则表达式只删除最后一部分,但是否可以在没有这种“hack”的情况下解析它?
【问题讨论】:
-
你尝试过什么了吗?如果是,我们可以看到您的代码吗?
-
我添加了一个代码示例
-
2 Nov 2021 14:26:12 +0000 (UTC)是否符合任何标准?还是只是RFC2822附加了其他内容? -
来自their code的官方引述:我们不识别折叠空格 (FWS) 或注释 (CFWS)。相反,出于我们的目的,我们接受任何 Unicode 空白字符序列(此处表示为
S)。任何实际的 RFC 2822 解析器都应该自己解析 FWS 和/或 CFWS 并将其替换为单个 SP (%x20);这是合法的。 -
@fevar 一旦我通过评论,它就会起作用。开发人员认识到并接受这是不正确的行为,我们需要实现与 rfc2822 cmets 的兼容性。在合并之前,您可以在您的
Cargo.toml:chrono = { git = "https://github.com/Finomnis/chrono.git", branch = "rfc2822_comments" }中使用它
标签: rust rfc2822 rust-chrono