请考虑以下情况
use chrono;
fn main() {
println!("{:?}", chrono::NaiveDate::parse_from_str("1978-01-12 01:00:23", "%Y-%m-%d %H:%M:%S"))
}
字符串包含year-month-day-hour-minute-second,但chrono只解析year-month-day。正如预期的那样,因为我使用了NaiveDate
,而不是NaiveDateTime
。
但是,有没有一种方法可以告诉(编程)chrono“消耗”了整个格式字符串?
3条答案
按热度按时间csbfibhn1#
使用
parse
:结果:
如果您想使用格式解析,那么什么会阻止您检查格式是否不包含
%H
、%M
或%S
?q3qa4bjr2#
让我们看看
parse_from_str()
的实现:NaiveDateTime:
初始日期:
除了最后一行之外,这两个实现看起来是相同的。因此,用于
NaiveDate
示例的Parsed
示例本质上与用于NaiveDateTime
变体的Parsed
示例相同。换句话说,整个格式都以相同的方式“使用”,但在NaiveDate
的情况下,您基本上只是使用了解析的日期-时间值的日期部分。不知道你到底在找什么,但我希望这些信息能有所帮助。
如果你只想通过使用
NaiveDate
来检查你是否“丢失”了一个“非零”时间分量(00:00:00
),那么我猜你可能只需要解析一个NaiveDateTime
并检查它的NaiveTime
值是否为“零”。euoag5mw3#
您可以创建一个原始
StrftimeItems
并检查是否有任何项是时间组件。在Numeric
和Fixed
中有很多变体,但所有这些变体似乎都是明确的时间或非时间。您可以检查该字符串是否具有列出的任何时间说明符here。所以
%H
、%k
、%I
、%l
等。您需要重新创建chrono的解析,但这并不太复杂,因为只有一个特殊字符%
。您可以解析
NaiveDateTime
并检查结果是否具有非零时间分量。这实际上并不起作用,因为解析的时间可能有00:00:00
,但这对您来说可能没问题。您可以重新格式化结果
NaiveDate
,看看它是否与解析的时间匹配。还有其他需要忽略的差异,主要是在 shell 和填充方面。