期间和计算
测量运行时间
测量从 time::Instant::now
开始运行的时间 time::Instant::elapsed
。
调用 time::Instant::elapsed
将返回 time::Duration
,我们将在实例末尾打印该时间。此方法不会更改或者重置 time::Instant
对象。
执行日期检查和时间计算
使用 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."),
}
}
时间的时区转换
使用 offset::Local::now
获取本地时间并显示,然后使用 DateTime::from_utc
结构体方法将其转换为 UTC 标准格式。最后,使用 offset::FixedOffset
结构体,可以将 UTC 时间转换为 UTC+8 和 UTC-2。
use chrono::{DateTime, FixedOffset, Local, Utc};
fn main() {
let local_time = Local::now();
let utc_time = DateTime::<Utc>::from_utc(local_time.naive_utc(), Utc);
let china_timezone = FixedOffset::east(8 * 3600);
let rio_timezone = FixedOffset::west(2 * 3600);
println!("Local time now is {}", local_time);
println!("UTC time now is {}", utc_time);
println!(
"Time in Hong Kong now is {}",
utc_time.with_timezone(&china_timezone)
);
println!("Time in Rio de Janeiro now is {}", utc_time.with_timezone(&rio_timezone));
}