格式化 std::time 输出

问题描述 投票:0回答:3

我想以某种格式显示当前时间。

我试图避免使用 time crate,因为它在 GitHub 存储库上被标记为已弃用。

我想使用这种确切的格式

time::now().strftime("%Y-%m-%d][%H:%M:%S").unwrap()
使用
std::time
,但它似乎没有
strftime

time rust
3个回答
44
投票

您可以使用板条箱

chrono
达到相同的结果:

extern crate chrono;

use chrono::Local;

fn main() {
    let date = Local::now();
    println!("{}", date.format("%Y-%m-%d][%H:%M:%S"));
}

11
投票

(目前)有两种

now
方法:
Instant::now
SystemTime::now

Instant
说:

单调递增时钟的测量。不透明且仅适用于

Duration

SystemTime
说:

系统时钟的测量,可用于与文件系统或其他进程等外部实体进行通信。

这些都不适合向人类展示。时间是困难,而格式化时间又增加了复杂性。幸好它不是标准库的一部分,否则它就会有一个固定的 API,无法改进。

正如其他地方提到的,我建议使用chronotime板条箱的

继承人


7
投票

自从时间箱子似乎复活了,你不再需要避免使用它。话虽这么说,除了

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(即表格)以确保您使用正确的说明符。

© www.soinside.com 2019 - 2024. All rights reserved.