我想以某种格式显示当前时间。
我试图避免使用 time crate,因为它在 GitHub 存储库上被标记为已弃用。
我想使用这种确切的格式
time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap()
使用std::time
,但它似乎没有strftime
。
chrono
达到相同的结果:
extern crate chrono;
use chrono::Local;
fn main() {
let date = Local::now();
println!("{}", date.format("%Y-%m-%d][%H:%M:%S"));
}
(目前)有两种
now
方法:Instant::now
和 SystemTime::now
。
Instant
说:
单调递增时钟的测量。不透明且仅适用于
。Duration
SystemTime
说:
系统时钟的测量,可用于与文件系统或其他进程等外部实体进行通信。
这些都不适合向人类展示。时间是困难,而格式化时间又增加了复杂性。幸好它不是标准库的一部分,否则它就会有一个固定的 API,无法改进。
正如其他地方提到的,我建议使用chrono,time
板条箱的
继承人。
自从时间箱子似乎复活了,你不再需要避免使用它。话虽这么说,除了
std::time
板条箱的类似 time
的格式化功能之外,您还可以继续使用 strftime
(这实际上是 time
板条箱所做的事情)。
use time::OffsetDateTime;
use std::time::SystemTime;
const DATE_FORMAT_STR: &'static str = "%Y-%m-%d][%H:%M:%S";
fn main() {
let dt: OffsetDateTime = SystemTime::now().into();
let dt2 = OffsetDateTime::now_utc(); // Also uses std::time (v0.2.26)
println!("{}", dt.format(DATE_FORMAT_STR));
println!("{}", dt2.format(DATE_FORMAT_STR));
}
注意(引用文档页面):
时间的格式化行为基于 C 中的 strftime,尽管它明确不兼容。说明符可能会丢失、添加或具有与 C 中不同的行为。
因此请务必检查this(即表格)以确保您使用正确的说明符。