12.1.2. 执行日期检查和时间计算
使用 DateTime::checked_add_signed
计算并显示两周之后的日期和时间,使用 DateTime::checked_sub_signed
计算并显示前一天的日期。如果无法计算出日期和时间,这些方法将返回 None。
可以在 chrono::format::strftime
中找到适用于 DateTime::format
的转义序列。
use chrono::{DateTime, Duration, Utc}; fn day_earlier(date_time: DateTime<Utc>) -> Option<DateTime<Utc>> { date_time.checked_sub_signed(Duration::days(1)) } fn main() { let now = Utc::now(); println!("{}", now); let almost_three_weeks_from_now = now.checked_add_signed(Duration::weeks(2)) .and_then(|in_2weeks| in_2weeks.checked_add_signed(Duration::weeks(1))) .and_then(day_earlier); match almost_three_weeks_from_now { Some(x) => println!("{}", x), None => eprintln!("Almost three weeks from now overflows!"), } match now.checked_add_signed(Duration::max_value()) { Some(x) => println!("{}", x), None => eprintln!("We can't use chrono to tell the time for the Solar System to complete more than one full orbit around the galactic center."), } }